{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "83de0ab1",
   "metadata": {},
   "source": [
    "<h2 align=center> 数字营商环境缺失值处理规则示例实验 </h2>\n",
    "\n",
    "<a id=\"ref18\"></a>\n",
    "### 实验目的\n",
    "<div class=\"alert alert-block alert-success\" style=\"margin-top: 20px; font-size:20px; line-height: 1.5;\">\n",
    "<ol>\n",
    "    <li>了解各指标缺失值的整体情况，并进行可视化观测。</li>\n",
    "    <li>评判数据质量，理解各指标之间的差异。</li>\n",
    "    <li>为后续各指标缺失值处理规则定义和具体缺失值方案选择奠定基础。</li>\n",
    "</ol>\n",
    "</div>\n",
    "\n",
    "<a id=\"ref19\"></a>\n",
    "### 实验要求\n",
    "<div class=\"alert alert-block alert-warning\" style=\"margin-top: 20px; font-size:20px; line-height: 1.5;\">\n",
    "<ol>\n",
    "    <li>确保对提供的数据进行详细且准确的探索和处理，确保数据质量。</li>\n",
    "    <li>根据不同的统计和可视化方法，提取有意义的信息，进行深入的解读。</li>\n",
    "    <li>结合统计分析结果，为后续缺失值处理策略的选择提供依据。</li>\n",
    "    <li>能够熟练使用相关的分析工具和技术进行缺失值统计和可视化，并能够解释和解读结果。</li>\n",
    "</ol>\n",
    "</div>\n",
    "\n",
    "<a id=\"ref20\"></a>\n",
    "### 实验内容\n",
    "<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px; font-size:20px; line-height: 1.5;\">\n",
    "<ol>\n",
    "    <li><strong>各指标缺失值统计与可视化：</strong>\n",
    "       <ul>\n",
    "           <li>读取并统计各指标缺失值占比。</li>\n",
    "           <li>使用水平条形图进行各指标缺失值的可视化。</li>\n",
    "           <li>解读各指标缺失值的统计结果。</li>\n",
    "       </ul>\n",
    "    </li>\n",
    "    <li><strong>各指标缺失值按国家分类统计与可视化：</strong>\n",
    "       <ul>\n",
    "           <li>读取并统计各指标按国家分类的缺失值占比。</li>\n",
    "           <li>使用水平条形图和热力图进行可视化。</li>\n",
    "           <li>解读各指标缺失值的国家分类统计结果。</li>\n",
    "       </ul>\n",
    "    </li>\n",
    "    <li><strong>各指标缺失值按年份分类统计与可视化：</strong>\n",
    "       <ul>\n",
    "           <li>读取并统计各指标按年份分类的缺失值占比。</li>\n",
    "           <li>使用水平条形图和热力图进行可视化。</li>\n",
    "           <li>解读各指标缺失值的年份分类统计结果。</li>\n",
    "       </ul>\n",
    "    </li>\n",
    "    <li><strong>限定国家名称对各指标进行缺失值统计与可视化：</strong>\n",
    "       <ul>\n",
    "           <li>选择特定国家，统计各指标缺失值占比。</li>\n",
    "           <li>使用适当的图表进行可视化。</li>\n",
    "           <li>解读统计结果。</li>\n",
    "       </ul>\n",
    "    </li>\n",
    "    <li><strong>限定国家名称和特定年份对各指标进行缺失值统计与可视化：</strong>\n",
    "       <ul>\n",
    "           <li>选择特定国家和特定年份，统计各指标缺失值占比。</li>\n",
    "           <li>使用适当的图表进行可视化。</li>\n",
    "           <li>解读统计结果。</li>\n",
    "       </ul>\n",
    "    </li>\n",
    "    <li><strong>限定国家名称、特定年份和指标名称进行缺失值统计与可视化：</strong>\n",
    "       <ul>\n",
    "           <li>选择特定国家、特定年份和指标，统计缺失值占比。</li>\n",
    "           <li>使用适当的图表进行可视化。</li>\n",
    "           <li>解读统计结果。</li>\n",
    "       </ul>\n",
    "    </li>\n",
    "</ol>\n",
    "</div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6c142669",
   "metadata": {},
   "source": [
    "## 营商环境缺失值处理规则解释\n",
    "在数据处理中，处理缺失值是一个重要的步骤。以下是对六种常用缺失值填充方法的概念介绍、优点、缺点及适用场景的分析：\n",
    "\n",
    "### 均值填充\n",
    "\n",
    "**概念**：用某一列中的均值填充该列中的缺失值。\n",
    "\n",
    "**优点**：\n",
    "- 简单易用，计算速度快。\n",
    "- 保持数据集中趋势不变。\n",
    "\n",
    "**缺点**：\n",
    "- 忽略数据的时间序列特性和趋势。\n",
    "- 可能会降低数据的方差，导致对模型的影响。\n",
    "\n",
    "**适用场景**：\n",
    "- 缺失值分布随机且数据集较大，均值可以代表整体情况。\n",
    "- 数据没有明显的时间序列特性。\n",
    "\n",
    "### 前向填充\n",
    "\n",
    "**概念**：用前一个时间点的值填充当前缺失值。\n",
    "\n",
    "**优点**：\n",
    "- 保持数据的趋势和连续性。\n",
    "- 适用于时间序列数据，尤其是连续性强的时间序列。\n",
    "\n",
    "**缺点**：\n",
    "- 不能处理连续缺失值。\n",
    "- 可能引入滞后效应，尤其在趋势变化剧烈时效果不佳。\n",
    "\n",
    "**适用场景**：\n",
    "- 时间序列数据，缺失值相对较少且分布不连续。\n",
    "\n",
    "### 后向填充\n",
    "\n",
    "**概念**：用后一个时间点的值填充当前缺失值。\n",
    "\n",
    "**优点**：\n",
    "- 与前向填充相似，保持数据的趋势和连续性。\n",
    "\n",
    "**缺点**：\n",
    "- 不能处理连续缺失值。\n",
    "- 可能引入未来信息，导致数据不真实。\n",
    "\n",
    "**适用场景**：\n",
    "- 时间序列数据，缺失值相对较少且分布不连续。\n",
    "- 需要与前向填充结合使用时。\n",
    "\n",
    "### 前后向填充\n",
    "\n",
    "**概念**：结合前向填充和后向填充的方法，通常先用后向填充填补开始部分的缺失值，再用前向填充填补后续缺失值。\n",
    "\n",
    "**优点**：\n",
    "- 能处理序列开始和结束部分的缺失值。\n",
    "- 结合了前向和后向填充的优点，适用性更广。\n",
    "\n",
    "**缺点**：\n",
    "- 处理连续缺失值时，效果依然不理想。\n",
    "- 计算量较大。\n",
    "\n",
    "**适用场景**：\n",
    "- 时间序列数据，缺失值出现在序列开始或结束部分。\n",
    "\n",
    "### 线性插值\n",
    "\n",
    "**概念**：用线性插值的方法，根据缺失值前后的数据点，进行线性插值计算填充缺失值。\n",
    "\n",
    "**优点**：\n",
    "- 保持数据的趋势和变化。\n",
    "- 适用于连续性数据，能较好地处理少量连续缺失值。\n",
    "\n",
    "**缺点**：\n",
    "- 对非线性变化数据效果不佳。\n",
    "- 插值的结果可能不是真实值，可能存在一定误差。\n",
    "\n",
    "**适用场景**：\n",
    "- 连续性数据或时间序列数据，缺失值不多且变化相对平滑。\n",
    "\n",
    "### 多项式插值\n",
    "\n",
    "**概念**：用多项式插值的方法，通过拟合一个多项式函数来预测缺失值。\n",
    "\n",
    "**优点**：\n",
    "- 可以处理非线性变化的数据，拟合效果较好。\n",
    "- 适用于具有复杂趋势的数据。\n",
    "\n",
    "**缺点**：\n",
    "- 计算复杂度高，容易过拟合。\n",
    "- 对数据量较大且缺失值较多时，效果可能不理想。\n",
    "\n",
    "**适用场景**：\n",
    "- 非线性变化的数据，缺失值较少且分布不规律。\n",
    "- 需要较高精度的填充结果。\n",
    "\n",
    "### 总结\n",
    "\n",
    "不同的缺失值填充方法有各自的优点和适用场景。在数字营商环境实际应用中，选择合适的方法需要根据数据的特性和具体的应用需求。例如，时间序列数据通常适合使用前向填充、后向填充、前后向填充或线性插值，而对于非线性变化的数据，多项式插值可能会有更好的效果。均值填充则适用于数据分布随机且无明显趋势的数据集。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f4ad991e",
   "metadata": {},
   "source": [
    "\n",
    "| 指标名称          | 缺失占比(%)   | 指标解释                                                                 |\n",
    "|:------------------|:--------------|:-------------------------------------------------------------------------|\n",
    "| S1                | 3.51          | 互联网普及率S1                                                           |\n",
    "| S2                | 21.43         | 安全互联网服务器使用人次S2                                               |\n",
    "| S3                | 1.82          | 固定宽带使用率S3                                                         |\n",
    "| S4                | 1.30          | 每百人移动电话拥有量S4                                                   |\n",
    "| S5                | <font color='red'>50.13</font> | 数据基础设施综合得分S5                                                   |\n",
    "| D1                | <font color='red'>50.13</font> | 公共基础数据可得性得分D1                                                 |\n",
    "| D2                | <font color='red'>50.13</font> | 数据发布访问等服务规范性得分D2                                           |\n",
    "| D3                | 0.00          | 数据使用成熟度得分D3                                                     |\n",
    "| F1                | <font color='red'>73.38</font> | 数字金融普惠性1(15岁以上拥有移动支付账户占比)F1                           |\n",
    "| F1_2              | <font color='red'>73.38</font> | 数字金融普惠性2(15岁以上人口开户率)F1_2                                   |\n",
    "| F2                | <font color='red'>93.25</font> | 数字金融活跃性(15岁以上人口一年内使用网络支付占比)F2                     |\n",
    "| F3                | <font color='red'>98.05</font> | 数字金融便利性1(15岁以上人口独立使用移动支付占比)F3                       |\n",
    "| F4                | <font color='red'>95.19</font> | 数字金融便利性2(15岁以上人口能独立使用金融账户占比)F4                     |\n",
    "| T1                | 29.09         | 技术研发投入1(R&D占GDP比例)T1                                           |\n",
    "| T1_2              | 37.66         | 技术研发投入2(每百万人口中研发人员数量)T1_2                             |\n",
    "| T2                | 12.73         | 信息通信科技支出(ICT产品进口占比)T2                                       |\n",
    "| T3_2              | 18.31         | 居民专利申请数量T3_2                                                     |\n",
    "| T3_3              | 15.45         | 非居民专利申请T3_3                                                       |\n",
    "| Q1                | 24.55         | 教育水平(高等教育学校入学率)Q1                                           |\n",
    "| Q2                | <font color='red'>64.16</font> | 教育投入(每名高等教育学生支出占人均国内生产总值GDP百分比)Q2               |\n",
    "| Q2_2              | 11.30         | 政府教育支出占总国内生产总值GDP百分比Q2_2                                |\n",
    "| Q2_3              | 15.06         | 政府教育支出占政府总支出的百分比Q2_3                                      |\n",
    "| Q3                | 25.97         | 劳动力市场效率(具有高等教育劳动力占高等教育人口的比例)Q3                 |\n",
    "| Q3_2              | 0.13          | 劳动力参与率(15岁及以上劳动力占总人口的比例-ILO模型估算)Q3_2             |\n",
    "| Q3_2（national estimate) | <font color='red'>12.86</font> | 劳动力参与率(15岁及以上劳动力占总人口比例-国家估算)Q3_3                  |\n",
    "| Q3_3              | 0.13          | 服务业占总就业百分比-ILO估算Q3_3                                         |\n",
    "| L1                | 0.00          | 政策透明度（反腐败控制：百分位排名）                                      |\n",
    "| L2                | 0.00          | 政府解决法规冲突效率（政治稳定性和暴力/恐怖主义的缺席：百分位排名）        |\n",
    "| L3                | 0.00          | 法规是否被严格执行（监管质量：百分位排名）                                |\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "796700ae",
   "metadata": {},
   "source": [
    "## 营商环境指标汇总及缺失值占比统计（2009~2022年14年数据）\n",
    "| 指标名称 | 缺失占比(%) | 指标解释 |\n",
    "| --- | --- | --- |\n",
    "| S1 | 3.51 | 互联网普及率S1 |\n",
    "| S2 | 21.43 | 百万人口安全互联网服务器使用人次S2 |\n",
    "| S3 | 1.82 | 固定宽带使用率S3 |\n",
    "| S4 | 1.30 | 每百人移动电话拥有量S4 |\n",
    "| **<span style=\"color:red;\">S5</span>** | **<span style=\"color:red;\">50.13</span>** | **<span style=\"color:red;\">数据基础设施综合得分S5</span>** |\n",
    "| **<span style=\"color:red;\">D1</span>** | **<span style=\"color:red;\">50.13</span>** | **<span style=\"color:red;\">公共基础数据可得性得分D1</span>** |\n",
    "| **<span style=\"color:red;\">D2</span>** | **<span style=\"color:red;\">50.13</span>** | **<span style=\"color:red;\">数据发布访问等服务规范性得分D2</span>** |\n",
    "| D3 | 0.00 | 数据使用成熟度得分D3 |\n",
    "| **<span style=\"color:red;\">F1</span>** | **<span style=\"color:red;\">73.38</span>** | **<span style=\"color:red;\">数字金融普惠性1(15岁以上拥有移动支付账户占比)F1</span>** |\n",
    "| **<span style=\"color:red;\">F1_2</span>** | **<span style=\"color:red;\">73.38</span>** | **<span style=\"color:red;\">数字金融普惠性2(15岁以上人口开户率)F1_2</span>** |\n",
    "| **<span style=\"color:red;\">F2</span>** | **<span style=\"color:red;\">93.25</span>** | **<span style=\"color:red;\">数字金融活跃性(15岁以上人口一年内使用网络支付占比)F2</span>** |\n",
    "| **<span style=\"color:red;\">F3</span>** | **<span style=\"color:red;\">98.05</span>** | **<span style=\"color:red;\">数字金融便利性1(15岁以上人口独立使用移动支付占比)F3</span>** |\n",
    "| **<span style=\"color:red;\">F4</span>** | **<span style=\"color:red;\">95.19</span>** | **<span style=\"color:red;\">数字金融便利性2(15岁以上人口能独立使用金融账户占比)F4</span>** |\n",
    "| T1 | 29.09 | 技术研发投入1(R&D占GDP比例)T1 |\n",
    "| T1_2 | 37.66 | 技术研发投入2(每百万人口中研发人员数量)T1_2 |\n",
    "| T2 | 12.73 | 信息通信科技支出(ICT产品进口占比)T2 |\n",
    "| T3_2 | 18.31 | 居民专利申请数量T3_2 |\n",
    "| T3_3 | 15.45 | 非居民专利申请T3_3 |\n",
    "| Q1 | 24.55 | 教育水平(高等教育学校入学率)Q1 |\n",
    "| **<span style=\"color:red;\">Q2</span>** | **<span style=\"color:red;\">64.16</span>** | **<span style=\"color:red;\">教育投入(每名高等教育学生支出占人均国内生产总值GDP百分比)Q2</span>** |\n",
    "| Q2_2 | 11.30 | 政府教育支出占总国内生产总值GDP百分比Q2_2 |\n",
    "| Q2_3 | 15.06 | 政府教育支出占政府总支出的百分比Q2_3 |\n",
    "| Q3 | 25.97 | 劳动力市场效率(具有高等教育劳动力占高等教育人口的比例)Q3 |\n",
    "| Q3_2 | 0.13 | 劳动力参与率(15岁及以上劳动力占总人口的比例-ILO模型估算)Q3_2 |\n",
    "| Q3_2（national estimate) | 12.86 | 劳动力参与率(15岁及以上劳动力占总人口比例-国家估算)Q3_2（national estimate) |\n",
    "| Q3_3 | 0.13 | 服务业占总就业百分比-ILO估算Q3_3 |\n",
    "| L1 | 0.00 | 政策透明度（反腐败控制：百分位排名） |\n",
    "| L2 | 0.00 | 政府解决法规冲突效率（政治稳定性和暴力/恐怖主义的缺席：百分位排名） |\n",
    "| L3 | 0.00 | 法规是否被严格执行（监管质量：百分位排名） |\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a695042",
   "metadata": {},
   "source": [
    "## 营商环境指标缺失值占比国家分类统计（2009~2022年14年数据）F1_2指标小问题\n",
    "\n",
    "| 国名Ch   | S1   | S2   | S3   | S4   | S5   | D1   | D2   | D3   | F1   | F1_2 | F2   | F3   | F4   | T1   | T1_2 | T2   | T3_2 | T3_3 | Q1   | Q2   | Q2_2 | Q2_3 | Q3_2 | Q3_2（national estimate) | Q3_3 | Q3   |\n",
    "|----------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|---------------------------|------|------|\n",
    "| 不丹     | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 71.43| 57.14| 35.71| 7.14 | 71.43| 7.14 | 7.14 | 0.00 | 14.29| 0.00 | 50.00 |\n",
    "| 中国     | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | **<span style=\"color:red;\">100.00</span>** | 0.00 | 0.00 | 0.00 | 42.86| 0.00 | **<span style=\"color:red;\">100.00</span>** |\n",
    "| 乌克兰   | 7.14 | 21.43| 7.14 | 7.14 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 0.00 | 0.00 | 7.14 | 7.14 | 7.14 | 14.29| 50.00| 0.00 | 0.00 | 7.14 | 7.14 | 7.14 | 42.86 |\n",
    "| 乌兹别克斯坦 | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 0.00 | 0.00 | 64.29| 7.14 | 7.14 | 7.14 | **<span style=\"color:red;\">100.00</span>** | 14.29| 21.43| 0.00 | 14.29| 0.00 | 92.86 |\n",
    "| 乌拉圭   | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 7.14 | 7.14 | 7.14 | 50.00| 50.00| 14.29| 78.57| 14.29| 21.43| 0.00 | 0.00 | 0.00 | 14.29 |\n",
    "| 以色列   | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 7.14 | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 14.29| 42.86| 0.00 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 伊朗     | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 50.00| 50.00| 42.86| 14.29| 14.29| 14.29| 42.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 7.14 |\n",
    "| 俄罗斯   | 0.00 | 21.43| 7.14 | 7.14 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 0.00 | 0.00 | 7.14 | 7.14 | 7.14 | 28.57| 71.43| 14.29| 14.29| 0.00 | 0.00 | 0.00 | 7.14 |\n",
    "| 保加利亚 | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 14.29| 64.29| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 克罗地亚 | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 14.29| 71.43| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 匈牙利   | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 14.29| 42.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 南非     | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 14.29| 14.29| 7.14 | 7.14 | 7.14 | 21.43| 64.29| 0.00 | 7.14 | 0.00 | 0.00 | 0.00 | 7.14 |\n",
    "| 卢森堡   | 0.00 | 21.43| 0.00 | 7.14 | 50.00| 50.00| 50.00| 0.00 | 78.57| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 21.43| 78.57| 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 印尼     | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 50.00| 57.14| 7.14 | 14.29| 14.29| 28.57| 57.14| 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 印度     | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 14.29| 71.43| 7.14 | 7.14 | 7.14 | 64.29| 64.29| 7.14 | 7.14 | 0.00 | 50.00| 0.00 | 50.00 |\n",
    "| 吉尔吉斯斯坦 | 7.14 | 21.43| 7.14 | 7.14 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 0.00 | **<span style=\"color:red;\">100.00</span>** | 7.14 | 14.29| 14.29| 7.14 | 50.00| 0.00 | 35.71| 0.00 | 7.14 | 0.00 | 42.86 |\n",
    "| 哈萨克斯坦 | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 0.00 | 0.00 | 14.29| 28.57| 28.57| 14.29| 57.14| 0.00 | 14.29| 0.00 | 7.14 | 0.00 | **<span style=\"color:red;\">100.00</span>** |\n",
    "| 土耳其   | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 14.29| 64.29| 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 圭亚那   | 14.29| 21.43| 14.29| 14.29| 50.00| 50.00| 50.00| 0.00 | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 71.43| 50.00| 64.29| 71.43| 35.71| 35.71| 0.00 | 85.71| 0.00 | 85.71 |\n",
    "| 塞尔维亚 | 0.00 | 21.43| 7.14 | 7.14 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 0.00 | 0.00 | 7.14 | 7.14 | 7.14 | 7.14 | 50.00| 35.71| 50.00| 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 奥地利   | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| 71.43| 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 14.29| 42.86| 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 孟加拉国 | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 57.14| 7.14 | 7.14 | 28.57| 71.43| 7.14 | 7.14 | 0.00 | 64.29| 0.00 | 64.29 |\n",
    "| 巴基斯坦 | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 50.00| 50.00| 7.14 | 14.29| 14.29| 28.57| 64.29| 7.14 | 7.14 | 0.00 | 21.43| 0.00 | 21.43 |\n",
    "| 巴拿马   | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 0.00 | 7.14 | 7.14 | 28.57| 7.14 | 14.29| 85.71| 28.57| 28.57| 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 希腊     | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 21.43| 7.14 | 7.14 | 7.14 | 21.43| 92.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 意大利   | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 14.29| 14.29| 14.29| 42.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 所罗门群岛 | 14.29| 21.43| 7.14 | 7.14 | 50.00| 50.00| 50.00| 0.00 | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 35.71| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 28.57| **<span style=\"color:red;\">100.00</span>** | 85.71| 85.71| 0.00 | 85.71| 0.00 | 92.86 |\n",
    "| 拉脱维亚 | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 14.29| 42.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 摩尔多瓦 | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 0.00 | 0.00 | 7.14 | 7.14 | 7.14 | 21.43| 42.86| 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 摩洛哥   | 7.14 | 21.43| 7.14 | 7.14 | 50.00| 50.00| 50.00| 0.00 | 85.71| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 64.29| 7.14 | 7.14 | 7.14 | 14.29| 92.86| 21.43| 21.43| 0.00 | 21.43| 0.00 | 85.71 |\n",
    "| 斯洛伐克 | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 14.29| 42.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 14.29 |\n",
    "| 斯洛文尼亚 | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 57.14| 57.14| 14.29| 42.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 新加坡   | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| **<span style=\"color:red;\">100.00</span>** | 14.29| 14.29| 7.14 | 7.14 | 7.14 | 78.57| 57.14| 0.00 | 7.14 | 0.00 | 0.00 | 0.00 | 64.29 |\n",
    "| 新西兰   | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 50.00| 50.00| 7.14 | 7.14 | 7.14 | 21.43| 71.43| 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 42.86 |\n",
    "| 智利     | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 14.29| 14.29| 7.14 | 7.14 | 7.14 | 14.29| 35.71| 14.29| 21.43| 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 柬埔寨   | 14.29| 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 7.14 | 71.43| 14.29| 14.29| 78.57| 7.14 | 7.14 | 0.00 | 14.29| 0.00 | 14.29 |\n",
    "| 格鲁吉亚 | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 28.57| 28.57| 7.14 | 7.14 | 7.14 | 78.57| 71.43| 0.00 | 0.00 | 0.00 | 14.29| 0.00 | 28.57 |\n",
    "| 波兰     | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 14.29| 42.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 波黑     | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 14.29| 21.43| 7.14 | 21.43| 21.43| 28.57| 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 泰国     | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| **<span style=\"color:red;\">100.00</span>** | 21.43| 21.43| 7.14 | 7.14 | 7.14 | 28.57| 64.29| 0.00 | 35.71| 0.00 | 0.00 | 0.00 | 7.14 |\n",
    "| 爱沙尼亚 | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 21.43| 42.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 白俄罗斯 | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 78.57| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 0.00 | 78.57| 7.14 | 7.14 | 7.14 | 7.14 | 35.71| 0.00 | 0.00 | 0.00 | 35.71| 0.00 | 50.00 |\n",
    "| 秘鲁     | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 14.29| **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 7.14 | 85.71| 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 立陶宛   | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 14.29| 42.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 罗马尼亚 | 0.00 | 21.43| 0.00 | 0.00 | 57.14| 57.14| 57.14| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 14.29| 42.86| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 肯尼亚   | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 85.71| 85.71| 28.57| 7.14 | 7.14 | 42.86| 92.86| 21.43| 92.86| 0.00 | 71.43| 0.00 | 78.57 |\n",
    "| 菲律宾   | 7.14 | 21.43| 7.14 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 64.29| 64.29| 7.14 | 7.14 | 7.14 | 21.43| 92.86| 28.57| 28.57| 0.00 | 0.00 | 0.00 | 28.57 |\n",
    "| 萨尔瓦多 | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 7.14 | 50.00| 7.14 | 50.00| 28.57| 57.14| 35.71| 0.00 | 7.14 | 0.00 | 0.00 | 0.00 | 7.14 |\n",
    "| 葡萄牙   | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 0.00 | 0.00 | 7.14 | 7.14 | 7.14 | 14.29| 57.14| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 越南     | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 57.14| 64.29| 14.29| 7.14 | 7.14 | 7.14 | 64.29| 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 7.14 |\n",
    "| 阿尔及利亚 | 7.14 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| 71.43| 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 35.71| 14.29| 14.29| 78.57| **<span style=\"color:red;\">100.00</span>** | 28.57| 7.14 | 0.00 | 42.86| 0.00 | 92.86 |\n",
    "| 阿尔巴尼亚 | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| 71.43| 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 14.29| 42.86| 28.57| 7.14 | 71.43| 7.14 | 14.29| 0.00 | 21.43| 0.00 | 21.43 |\n",
    "| 韩国     | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 7.14 | 7.14 | 7.14 | 7.14 | 42.86| 85.71| 7.14 | 7.14 | 0.00 | 0.00 | 0.00 | 0.00 |\n",
    "| 马来西亚 | 0.00 | 21.43| 0.00 | 0.00 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| 92.86| 92.86| 35.71| 35.71| 7.14 | 7.14 | 7.14 | 14.29| 42.86| 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 14.29 |\n",
    "| 黎巴嫩   | 7.14 | 21.43| 35.71| 7.14 | 50.00| 50.00| 50.00| 0.00 | 71.43| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | 92.86| **<span style=\"color:red;\">100.00</span>** | **<span style=\"color:red;\">100.00</span>** | 7.14 | 78.57| 78.57| **<span style=\"color:red;\">100.00</span>** | 64.29| 28.57| 28.57| 0.00 | 85.71| 0.00 | 92.86 |\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3705a295",
   "metadata": {},
   "source": [
    "## 均值填充缺失值规则示例\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93bd816a",
   "metadata": {},
   "source": [
    "###  缺失较少的示例数据\n",
    "| 国名Ch | Q1 | Year |\n",
    "| --- | --- | --- |\n",
    "| 葡萄牙 | 85.00598907 | 2009 |\n",
    "| 葡萄牙 | 87.44342804 | 2010 |\n",
    "| 葡萄牙 | 90.690979 | 2011 |\n",
    "| 葡萄牙 | 90.78031158 | 2012 |\n",
    "| 葡萄牙 | 90.25910187 | 2013 |\n",
    "| 葡萄牙 | 91.51480865 | 2014 |\n",
    "| 葡萄牙 | 93.37854004 | 2015 |\n",
    "| 葡萄牙 | 93.77346039 | 2016 |\n",
    "| 葡萄牙 | 93.88085938 | 2017 |\n",
    "| 葡萄牙 | 90.96144867 | 2018 |\n",
    "| 葡萄牙 | 94.44496155 | 2019 |\n",
    "| 葡萄牙 | 99.35899353 | 2020 |\n",
    "| 葡萄牙 | **NaN** | 2021 |\n",
    "| 葡萄牙 | **NaN** | 2022 |\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "20ea26e7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>最小值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>均值</th>\n",
       "      <th>标准差</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>85.005989</td>\n",
       "      <td>99.358994</td>\n",
       "      <td>91.791073</td>\n",
       "      <td>3.635887</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "葡萄牙Q1均值填充结果示例：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国名Ch</th>\n",
       "      <th>Q1</th>\n",
       "      <th>Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>85.00598907</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>87.44342804</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>90.69097900</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>90.78031158</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>90.25910187</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>91.51480865</td>\n",
       "      <td>2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>93.37854004</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>93.77346039</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>93.88085938</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>90.96144867</td>\n",
       "      <td>2018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>94.44496155</td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>99.35899353</td>\n",
       "      <td>2020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">91.79107348</span></td>\n",
       "      <td>2021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">91.79107348</span></td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from statsmodels.tsa.holtwinters import ExponentialSmoothing\n",
    "from IPython.display import display, HTML\n",
    "import matplotlib.pyplot as plt\n",
    "import warnings  # 导入warnings库用于警告控制\n",
    "\n",
    "# 屏蔽所有警告\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "# 创建数据集\n",
    "data = {\n",
    "    \"国名Ch\": [\"葡萄牙\"] * 14,\n",
    "    \"Q1\": [85.00598907, 87.44342804, 90.690979, 90.78031158, 90.25910187, 91.51480865, \n",
    "           93.37854004, 93.77346039, 93.88085938, 90.96144867, 94.44496155, 99.35899353, np.nan, np.nan],\n",
    "    \"Year\": list(range(2009, 2022 + 1))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 计算描述性统计量\n",
    "desc_stats = df['Q1'].describe()\n",
    "desc_stats_html = desc_stats[['min', 'max', 'mean', 'std']].to_frame().T\n",
    "desc_stats_html.columns = ['最小值', '最大值', '均值', '标准差']\n",
    "desc_stats_html = desc_stats_html.to_html(index=False)\n",
    "\n",
    "# 输出描述性统计量\n",
    "display(HTML(desc_stats_html))\n",
    "\n",
    "# 计算均值\n",
    "mean_value = df['Q1'].mean()\n",
    "\n",
    "# 均值填充\n",
    "df_mean_filled = df.copy()\n",
    "df_mean_filled['Q1'] = df_mean_filled['Q1'].fillna(mean_value)\n",
    "\n",
    "# 标记填充值为红色粗体\n",
    "def highlight_mean_filled(val, mean_val):\n",
    "    if pd.isna(val):\n",
    "        return ''\n",
    "    elif val == mean_val:\n",
    "        return f'<span style=\"color:red; font-weight:bold\">{val:.8f}</span>'\n",
    "    else:\n",
    "        return f'{val:.8f}' if isinstance(val, (int, float)) else val\n",
    "\n",
    "# 应用样式\n",
    "df_mean_filled['Q1'] = df_mean_filled['Q1'].apply(lambda x: highlight_mean_filled(x, mean_value))\n",
    "df_mean_filled_html = df_mean_filled.to_html(index=False, escape=False)\n",
    "\n",
    "# 输出均值填充结果\n",
    "print(\"葡萄牙Q1均值填充结果示例：\")\n",
    "display(HTML(df_mean_filled_html))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f174fa56",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "描述性统计结果：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>最大值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>标准差</th>\n",
       "      <th>均值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>90.840767</td>\n",
       "      <td>81.165138</td>\n",
       "      <td>3.0841</td>\n",
       "      <td>85.834133</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "填充后的数据集：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国家名Ch</th>\n",
       "      <th>Year</th>\n",
       "      <th>Q1</th>\n",
       "      <th>is_filled</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2009</td>\n",
       "      <td>84.564194</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2010</td>\n",
       "      <td>85.162064</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2011</td>\n",
       "      <td>87.535751</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2012</td>\n",
       "      <td>88.238029</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2013</td>\n",
       "      <td>87.968933</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2014</td>\n",
       "      <td>85.550308</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2015</td>\n",
       "      <td>81.165138</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2016</td>\n",
       "      <td>81.617783</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2017</td>\n",
       "      <td>82.284157</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2018</td>\n",
       "      <td>85.783730</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2019</td>\n",
       "      <td>89.298737</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2020</td>\n",
       "      <td>90.840767</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2021</td>\n",
       "      <td>85.834133</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2022</td>\n",
       "      <td>85.834133</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>匈牙利</td>\n",
       "      <td>2023</td>\n",
       "      <td>85.834133</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from IPython.display import display, HTML\n",
    "\n",
    "# 创建数据\n",
    "data = {\n",
    "    '国家名Ch': ['匈牙利'] * 15,\n",
    "    'Year': list(range(2009, 2024)),\n",
    "    'Q1': [84.56419373, 85.1620636, 87.53575134, 88.23802948, 87.96893311,\n",
    "           85.55030823, 81.16513824, 81.61778259, 82.2841568, 85.78372955,\n",
    "           89.29873657, 90.84076691, np.nan, np.nan, np.nan]\n",
    "}\n",
    "\n",
    "# 创建 DataFrame\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 计算描述性统计\n",
    "stats = df['Q1'].describe().loc[['max', 'min', 'std', 'mean']]\n",
    "stats_df = pd.DataFrame(stats).T\n",
    "stats_df.columns = ['最大值', '最小值', '标准差', '均值']\n",
    "\n",
    "# 输出描述性统计结果为 HTML 表格\n",
    "stats_html = stats_df.to_html(index=False, escape=False)\n",
    "print(\"描述性统计结果：\")\n",
    "display(HTML(stats_html))\n",
    "\n",
    "# 用均值填充缺失值\n",
    "mean_value = stats['mean']\n",
    "df['Q1'] = df['Q1'].fillna(mean_value)\n",
    "\n",
    "# 标记填充的值\n",
    "df['is_filled'] = df['Q1'].apply(lambda x: x == mean_value)\n",
    "\n",
    "# 创建 HTML 表格并标注填充的值\n",
    "html_table = df.to_html(index=False, escape=False)\n",
    "html_table = html_table.replace(\n",
    "    f\">{mean_value}<\",\n",
    "    f\"><font color='red'>{mean_value}</font><\"\n",
    ")\n",
    "\n",
    "# 移除辅助列\n",
    "df.drop(columns=['is_filled'], inplace=True)\n",
    "\n",
    "print(\"\\n填充后的数据集：\")\n",
    "display(HTML(html_table))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "c5d38ff8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "葡萄牙时间序列模型填充结果示例：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国名Ch</th>\n",
       "      <th>Q1</th>\n",
       "      <th>Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>85.00598907</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>87.44342804</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>90.69097900</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>90.78031158</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>90.25910187</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>91.51480865</td>\n",
       "      <td>2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>93.37854004</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>93.77346039</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>93.88085938</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>90.96144867</td>\n",
       "      <td>2018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>94.44496155</td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td>99.35899353</td>\n",
       "      <td>2020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">97.48877114</span></td>\n",
       "      <td>2021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>葡萄牙</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">98.36533988</span></td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from statsmodels.tsa.holtwinters import ExponentialSmoothing\n",
    "from IPython.display import display, HTML\n",
    "import warnings\n",
    "\n",
    "# 屏蔽所有警告\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "# 创建数据集\n",
    "# data = {\n",
    "#     \"国名Ch\": [\"孟加拉国\"] * 14,\n",
    "#     \"Q1\": [11.22078991, 13.11622047, 25.60045242, np.nan, 32.83700943, np.nan, 32.35713196, 35.5150528, 41.73958206, 40.81816101, np.nan, 45.59895325, 36.38068771, np.nan],\n",
    "#     \"Year\": list(range(2009, 2022 + 1))\n",
    "# }\n",
    "# 创建数据集\n",
    "data = {\n",
    "    \"国名Ch\": [\"葡萄牙\"] * 14,\n",
    "    \"Q1\": [85.00598907, 87.44342804, 90.690979, 90.78031158, 90.25910187, 91.51480865, \n",
    "           93.37854004, 93.77346039, 93.88085938, 90.96144867, 94.44496155, 99.35899353, np.nan, np.nan],\n",
    "    \"Year\": list(range(2009, 2022 + 1))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 数据预处理和模型训练\n",
    "df_notnull = df[df['Q1'].notnull()]\n",
    "\n",
    "# 创建并拟合模型\n",
    "model = ExponentialSmoothing(df_notnull['Q1'], trend='add', seasonal=None, seasonal_periods=None).fit()\n",
    "\n",
    "# 预测未来的值\n",
    "pred = model.forecast(df['Q1'].isna().sum())\n",
    "\n",
    "# 时间序列模型填充\n",
    "df_model_filled = df.copy()\n",
    "df_model_filled.loc[df_model_filled['Q1'].isna(), 'Q1'] = pred.values\n",
    "\n",
    "# 标记填充值为红色粗体\n",
    "def highlight_model_filled(val, pred_vals):\n",
    "    if pd.isna(val):\n",
    "        return ''\n",
    "    elif val in pred_vals:\n",
    "        return f'<span style=\"color:red; font-weight:bold\">{val:.8f}</span>'\n",
    "    else:\n",
    "        return f'{val:.8f}' if isinstance(val, (int, float)) else val\n",
    "\n",
    "# 应用样式\n",
    "df_model_filled['Q1'] = df_model_filled['Q1'].apply(lambda x: highlight_model_filled(x, pred.values))\n",
    "df_model_filled_html = df_model_filled.to_html(index=False, escape=False)\n",
    "\n",
    "# 输出时间序列模型填充结果\n",
    "print(\"葡萄牙时间序列模型填充结果示例：\")\n",
    "display(HTML(df_model_filled_html))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "66900a1a",
   "metadata": {},
   "source": [
    "### 均值填充缺失值示例2（缺失较多）\n",
    "| 国名Ch | Q2 | Year |\n",
    "| --- | --- | --- |\n",
    "| 孟加拉国 | 11.22078991 | 2009 |\n",
    "| 孟加拉国 | 13.11622047 | 2010 |\n",
    "| 孟加拉国 | 25.60045242 | 2011 |\n",
    "| 孟加拉国 | **NaN** | 2012 |\n",
    "| 孟加拉国 | 32.83700943 | 2013 |\n",
    "| 孟加拉国 | **NaN** | 2014 |\n",
    "| 孟加拉国 | 32.35713196 | 2015 |\n",
    "| 孟加拉国 | 35.5150528 | 2016 |\n",
    "| 孟加拉国 | 41.73958206 | 2017 |\n",
    "| 孟加拉国 | 40.81816101 | 2018 |\n",
    "| 孟加拉国 | **NaN** | 2019 |\n",
    "| 孟加拉国 | 45.59895325 | 2020 |\n",
    "| 孟加拉国 | 36.38068771 | 2021 |\n",
    "| 孟加拉国 | **NaN** | 2022 |\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "7e5725f9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>最小值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>均值</th>\n",
       "      <th>标准差</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>11.22079</td>\n",
       "      <td>45.598953</td>\n",
       "      <td>31.518404</td>\n",
       "      <td>11.628187</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "孟加拉均值填充结果示例：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国名Ch</th>\n",
       "      <th>Q1</th>\n",
       "      <th>Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>11.22078991</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>13.11622047</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>25.60045242</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">31.51840410</span></td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>32.83700943</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">31.51840410</span></td>\n",
       "      <td>2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>32.35713196</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>35.51505280</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>41.73958206</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>40.81816101</td>\n",
       "      <td>2018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">31.51840410</span></td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>45.59895325</td>\n",
       "      <td>2020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>36.38068771</td>\n",
       "      <td>2021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">31.51840410</span></td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "# from statsmodels.tsa.holtwinters import ExponentialSmoothing\n",
    "from IPython.display import display, HTML\n",
    "import matplotlib.pyplot as plt\n",
    "import warnings  # 导入warnings库用于警告控制\n",
    "\n",
    "# 屏蔽所有警告\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "# 创建数据集\n",
    "data = {\n",
    "    \"国名Ch\": [\"孟加拉国\"] * 14,\n",
    "    \"Q1\": [11.22078991, 13.11622047, 25.60045242, np.nan, 32.83700943, np.nan, \n",
    "           32.35713196, 35.5150528, 41.73958206, 40.81816101, np.nan, 45.59895325, \n",
    "           36.38068771, np.nan],\n",
    "    \"Year\": list(range(2009, 2022 + 1))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 计算描述性统计量\n",
    "desc_stats = df['Q1'].describe()\n",
    "desc_stats_html = desc_stats[['min', 'max', 'mean', 'std']].to_frame().T\n",
    "desc_stats_html.columns = ['最小值', '最大值', '均值', '标准差']\n",
    "desc_stats_html = desc_stats_html.to_html(index=False)\n",
    "\n",
    "# 输出描述性统计量\n",
    "display(HTML(desc_stats_html))\n",
    "\n",
    "# 计算均值\n",
    "mean_value = df['Q1'].mean()\n",
    "\n",
    "# 均值填充\n",
    "df_mean_filled = df.copy()\n",
    "df_mean_filled['Q1'] = df_mean_filled['Q1'].fillna(mean_value)\n",
    "\n",
    "# 标记填充值为红色粗体\n",
    "def highlight_mean_filled(val, mean_val):\n",
    "    if pd.isna(val):\n",
    "        return ''\n",
    "    elif val == mean_val:\n",
    "        return f'<span style=\"color:red; font-weight:bold\">{val:.8f}</span>'\n",
    "    else:\n",
    "        return f'{val:.8f}' if isinstance(val, (int, float)) else val\n",
    "\n",
    "# 应用样式\n",
    "df_mean_filled['Q1'] = df_mean_filled['Q1'].apply(lambda x: highlight_mean_filled(x, mean_value))\n",
    "df_mean_filled_html = df_mean_filled.to_html(index=False, escape=False)\n",
    "\n",
    "# 输出均值填充结果\n",
    "print(\"孟加拉均值填充结果示例：\")\n",
    "display(HTML(df_mean_filled_html))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "97a326eb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "孟加拉时间序列模型填充结果示例：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国名Ch</th>\n",
       "      <th>Q1</th>\n",
       "      <th>Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>11.22078991</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>13.11622047</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>25.60045242</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">50.17746447</span></td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>32.83700943</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">53.57002248</span></td>\n",
       "      <td>2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>32.35713196</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>35.51505280</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>41.73958206</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>40.81816101</td>\n",
       "      <td>2018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">56.96258049</span></td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>45.59895325</td>\n",
       "      <td>2020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>36.38068771</td>\n",
       "      <td>2021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">60.35513849</span></td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from statsmodels.tsa.holtwinters import ExponentialSmoothing\n",
    "from IPython.display import display, HTML\n",
    "import warnings\n",
    "\n",
    "# 屏蔽所有警告\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "# 创建数据集\n",
    "data = {\n",
    "    \"国名Ch\": [\"孟加拉国\"] * 14,\n",
    "    \"Q1\": [11.22078991, 13.11622047, 25.60045242, np.nan, 32.83700943, np.nan, 32.35713196, 35.5150528, 41.73958206, 40.81816101, np.nan, 45.59895325, 36.38068771, np.nan],\n",
    "    \"Year\": list(range(2009, 2022 + 1))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 数据预处理和模型训练\n",
    "df_notnull = df[df['Q1'].notnull()]\n",
    "\n",
    "# 创建并拟合模型\n",
    "model = ExponentialSmoothing(df_notnull['Q1'], trend='add', seasonal=None, seasonal_periods=None).fit()\n",
    "\n",
    "# 预测未来的值\n",
    "pred = model.forecast(df['Q1'].isna().sum())\n",
    "\n",
    "# 时间序列模型填充\n",
    "df_model_filled = df.copy()\n",
    "df_model_filled.loc[df_model_filled['Q1'].isna(), 'Q1'] = pred.values\n",
    "\n",
    "# 标记填充值为红色粗体\n",
    "def highlight_model_filled(val, pred_vals):\n",
    "    if pd.isna(val):\n",
    "        return ''\n",
    "    elif val in pred_vals:\n",
    "        return f'<span style=\"color:red; font-weight:bold\">{val:.8f}</span>'\n",
    "    else:\n",
    "        return f'{val:.8f}' if isinstance(val, (int, float)) else val\n",
    "\n",
    "# 应用样式\n",
    "df_model_filled['Q1'] = df_model_filled['Q1'].apply(lambda x: highlight_model_filled(x, pred.values))\n",
    "df_model_filled_html = df_model_filled.to_html(index=False, escape=False)\n",
    "\n",
    "# 输出时间序列模型填充结果\n",
    "print(\"孟加拉时间序列模型填充结果示例：\")\n",
    "display(HTML(df_model_filled_html))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "446956c8",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>最小值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>均值</th>\n",
       "      <th>标准差</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>11.22079</td>\n",
       "      <td>45.598953</td>\n",
       "      <td>31.518404</td>\n",
       "      <td>11.628187</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "孟加拉线性插值填充结果示例：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国名Ch</th>\n",
       "      <th>Q1</th>\n",
       "      <th>Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>11.22078991</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>13.11622047</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>25.60045242</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">29.21873093</span></td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>32.83700943</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">32.59707069</span></td>\n",
       "      <td>2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>32.35713196</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>35.51505280</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>41.73958206</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>40.81816101</td>\n",
       "      <td>2018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">43.20855713</span></td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>45.59895325</td>\n",
       "      <td>2020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">36.38068771</span></td>\n",
       "      <td>2021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">36.38068771</span></td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from scipy.interpolate import make_interp_spline\n",
    "from IPython.display import display, HTML\n",
    "import warnings\n",
    "\n",
    "# 屏蔽所有警告\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "# 创建数据集\n",
    "data = {\n",
    "    \"国名Ch\": [\"孟加拉国\"] * 14,\n",
    "    \"Q1\": [11.22078991, 13.11622047, 25.60045242, np.nan, 32.83700943, np.nan, \n",
    "           32.35713196, 35.5150528, 41.73958206, 40.81816101, np.nan, 45.59895325, \n",
    "           36.38068771, np.nan],\n",
    "    \"Year\": list(range(2009, 2023))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 计算描述性统计量\n",
    "desc_stats = df['Q1'].describe()\n",
    "desc_stats_html = desc_stats[['min', 'max', 'mean', 'std']].to_frame().T\n",
    "desc_stats_html.columns = ['最小值', '最大值', '均值', '标准差']\n",
    "desc_stats_html = desc_stats_html.to_html(index=False)\n",
    "\n",
    "# 输出描述性统计量\n",
    "display(HTML(desc_stats_html))\n",
    "\n",
    "# 线性插值\n",
    "df_linear_filled = df.copy()\n",
    "df_linear_filled['Q1'] = df_linear_filled['Q1'].interpolate(method='linear')\n",
    "\n",
    "# 标记填充值为红色\n",
    "def highlight_linear_filled(val, filled_vals):\n",
    "    if pd.isna(val):\n",
    "        return ''\n",
    "    elif val in filled_vals:\n",
    "        return f'<span style=\"color:red; font-weight:bold\">{val:.8f}</span>'\n",
    "    else:\n",
    "        return f'{val:.8f}' if isinstance(val, (int, float)) else val\n",
    "\n",
    "# 应用样式\n",
    "linear_filled_values = df_linear_filled.loc[df['Q1'].isna(), 'Q1'].values\n",
    "df_linear_filled['Q1'] = df_linear_filled['Q1'].apply(lambda x: highlight_linear_filled(x, linear_filled_values))\n",
    "df_linear_filled_html = df_linear_filled.to_html(index=False, escape=False)\n",
    "\n",
    "# 输出线性插值填充结果\n",
    "print(\"孟加拉线性插值填充结果示例：\")\n",
    "display(HTML(df_linear_filled_html))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "4e6e88f3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "孟加拉多项式插值填充结果示例：\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国名Ch</th>\n",
       "      <th>Q1</th>\n",
       "      <th>Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>11.22078991</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>13.11622047</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>25.60045242</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">31.85727185</span></td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>32.83700943</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">32.29269813</span></td>\n",
       "      <td>2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>32.35713196</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>35.51505280</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>41.73958206</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>40.81816101</td>\n",
       "      <td>2018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">44.21354993</span></td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>45.59895325</td>\n",
       "      <td>2020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td>36.38068771</td>\n",
       "      <td>2021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>孟加拉国</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">16.55875331</span></td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from scipy.interpolate import make_interp_spline\n",
    "from IPython.display import display, HTML\n",
    "import warnings\n",
    "# 创建数据集\n",
    "data = {\n",
    "    \"国名Ch\": [\"孟加拉国\"] * 14,\n",
    "    \"Q1\": [11.22078991, 13.11622047, 25.60045242, np.nan, 32.83700943, np.nan, \n",
    "           32.35713196, 35.5150528, 41.73958206, 40.81816101, np.nan, 45.59895325, \n",
    "           36.38068771, np.nan],\n",
    "    \"Year\": list(range(2009, 2023))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 多项式插值\n",
    "df_poly_filled = df.copy()\n",
    "x = df['Year'][df['Q1'].notna()]\n",
    "y = df['Q1'][df['Q1'].notna()]\n",
    "poly_interp = make_interp_spline(x, y, k=2)\n",
    "\n",
    "# 生成插值值\n",
    "x_full = df['Year']\n",
    "y_interp = poly_interp(x_full)\n",
    "\n",
    "# 用插值值填充缺失值\n",
    "df_poly_filled['Q1'] = df['Q1'].combine_first(pd.Series(y_interp, index=df.index))\n",
    "\n",
    "# 标记填充值为红色\n",
    "poly_filled_values = df_poly_filled.loc[df['Q1'].isna(), 'Q1'].values\n",
    "df_poly_filled['Q1'] = df_poly_filled['Q1'].apply(lambda x: highlight_linear_filled(x, poly_filled_values))\n",
    "df_poly_filled_html = df_poly_filled.to_html(index=False, escape=False)\n",
    "\n",
    "# 输出多项式插值填充结果\n",
    "print(\"孟加拉多项式插值填充结果示例：\\n\")\n",
    "display(HTML(df_poly_filled_html))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00a49dba",
   "metadata": {},
   "source": [
    "从Q1代表的高等教育入学率来看，考虑到该指标一般情况下会随着时间逐年增加，或者在一些年份保持相对稳定，选择合适的填充方法需要考虑数据的趋势和波动特性。\n",
    "\n",
    "### 填充方法分析：\n",
    "\n",
    "#### 1. 均值填充\n",
    "- **结果特点**：用均值填充缺失值，每个缺失值都填充为所有非缺失值的均值。\n",
    "- **优点**：简单易行，适用于数据波动不大的情况。\n",
    "- **缺点**：不考虑数据的时间序列趋势，填充值可能偏离实际变化趋势。\n",
    "- **适用场景**：适合数据波动小且均值代表性强的情况。\n",
    "\n",
    "#### 2. 时间序列模型填充（Exponential Smoothing）\n",
    "- **结果特点**：利用指数平滑模型预测填充，考虑了数据的趋势和季节性。\n",
    "- **优点**：适用于有明显趋势或季节性的数据。\n",
    "- **缺点**：需要确保模型参数选择合理，可能会过度平滑或产生偏差。\n",
    "- **适用场景**：适合有明显趋势或季节性的时间序列数据。\n",
    "\n",
    "#### 3. 线性插值填充\n",
    "- **结果特点**：用相邻非缺失值的线性关系填充缺失值。\n",
    "- **优点**：简单易行，能较好地反映数据的逐年变化趋势。\n",
    "- **缺点**：假设数据在缺失段之间线性变化，可能不适合非线性变化的数据。\n",
    "- **适用场景**：适合数据变化相对平稳，线性增长或小幅波动的情况。\n",
    "\n",
    "#### 4. 多项式插值填充\n",
    "- **结果特点**：用多项式拟合整个数据集进行插值。\n",
    "- **优点**：能更好地拟合复杂的变化趋势。\n",
    "- **缺点**：高次多项式可能过拟合，填充值可能会出现较大波动或不合理情况。\n",
    "- **适用场景**：适合数据有复杂趋势或明显非线性变化的情况。\n",
    "\n",
    "### 选择理由和解释：\n",
    "\n",
    "从Q1的时间序列数据和一般特性考虑，以下几点是选择填充方法的依据：\n",
    "\n",
    "1. **高等教育入学率一般是逐年增加或保持稳定的趋势**。\n",
    "2. **缺失值填充方法需要反映这一逐年增加的趋势或小幅度变化**。\n",
    "3. **避免过拟合或填充值出现不合理的大幅波动**。\n",
    "\n",
    "基于以上考虑，**线性插值填充**是最合适的方案，理由如下：\n",
    "\n",
    "- **线性插值能较好地反映逐年变化的趋势**，适合高等教育入学率这种逐年小幅增长或维持不变的指标。\n",
    "- **避免了均值填充的过于简单和忽略趋势问题**。\n",
    "- **比时间序列模型更简单，避免了模型选择和参数设置的复杂性**。\n",
    "- **比多项式插值更稳定，避免了高次多项式可能带来的过拟合和不合理波动**。\n",
    "\n",
    "这个填充方案既能反映数据的逐年变化趋势，又保持了相对的稳定性，适合高等教育入学率这样的指标。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86434159",
   "metadata": {},
   "source": [
    "## 前向填充缺失值示例\n",
    "- 数据示例\n",
    "\n",
    "| 国名Ch  | T1           | Year |\n",
    "| ------- | ------------- | ---- |\n",
    "| 奥地利  | 2.596740007  | 2009 |\n",
    "| 奥地利  | 2.726099968  | 2010 |\n",
    "| 奥地利  | 2.668679953  | 2011 |\n",
    "| 奥地利  | 2.914720058  | 2012 |\n",
    "| 奥地利  | 2.954920053  | 2013 |\n",
    "| 奥地利  | 3.084290028  | 2014 |\n",
    "| 奥地利  | 3.049690008  | 2015 |\n",
    "| 奥地利  | 3.116549969  | 2016 |\n",
    "| 奥地利  | 3.05656004   | 2017 |\n",
    "| 奥地利  | 3.091820002  | 2018 |\n",
    "| 奥地利  | 3.132469893  | 2019 |\n",
    "| 奥地利  | 3.201489925  | 2020 |\n",
    "| 奥地利  | 3.25632      | 2021 |\n",
    "| 奥地利  | **NaN**      | 2022 |\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "c3963b60",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>最小值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>均值</th>\n",
       "      <th>标准差</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>2.59674</td>\n",
       "      <td>3.25632</td>\n",
       "      <td>2.988488</td>\n",
       "      <td>0.206887</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前向填充结果示例：\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国名Ch</th>\n",
       "      <th>T1</th>\n",
       "      <th>Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>2.59674001</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>2.72609997</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>2.66867995</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>2.91472006</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>2.95492005</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>3.08429003</td>\n",
       "      <td>2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>3.04969001</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>3.11654997</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>3.05656004</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>3.09182000</td>\n",
       "      <td>2018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>3.13246989</td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td>3.20148993</td>\n",
       "      <td>2020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">3.25632000</span></td>\n",
       "      <td>2021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>奥地利</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">3.25632000</span></td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from IPython.display import display, HTML\n",
    "\n",
    "# 创建数据集\n",
    "data = {\n",
    "    \"国名Ch\": [\"奥地利\"] * 14,\n",
    "    \"T1\": [2.596740007, 2.726099968, 2.668679953, 2.914720058, 2.954920053, 3.084290028,\n",
    "           3.049690008, 3.116549969, 3.05656004, 3.091820002, 3.132469893, 3.201489925, \n",
    "           3.25632, np.nan],\n",
    "    \"Year\": list(range(2009, 2023))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 计算描述性统计量\n",
    "desc_stats = df['T1'].describe()\n",
    "desc_stats_html = desc_stats[['min', 'max', 'mean', 'std']].to_frame().T\n",
    "desc_stats_html.columns = ['最小值', '最大值', '均值', '标准差']\n",
    "desc_stats_html = desc_stats_html.to_html(index=False)\n",
    "\n",
    "# 输出描述性统计量\n",
    "display(HTML(desc_stats_html))\n",
    "\n",
    "# 前向填充\n",
    "df_ffill = df.copy()\n",
    "df_ffill['T1'] = df_ffill['T1'].ffill()\n",
    "\n",
    "# 记录填充值\n",
    "filled_values = df_ffill.loc[df['T1'].isna(), 'T1'].values\n",
    "\n",
    "# 标记填充值为红色\n",
    "def highlight_ffill(val, filled_vals):\n",
    "    if pd.isna(val):\n",
    "        return ''\n",
    "    elif val in filled_vals:\n",
    "        return f'<span style=\"color:red; font-weight:bold\">{val:.8f}</span>'\n",
    "    else:\n",
    "        return f'{val:.8f}' if isinstance(val, (int, float)) else val\n",
    "\n",
    "# 应用样式\n",
    "df_ffill['T1'] = df_ffill['T1'].apply(lambda x: highlight_ffill(x, filled_values))\n",
    "df_ffill_html = df_ffill.to_html(index=False, escape=False)\n",
    "\n",
    "# 输出前向填充结果\n",
    "print(\"前向填充结果示例：\\n\")\n",
    "display(HTML(df_ffill_html))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8eda782c",
   "metadata": {},
   "source": [
    "## 后向填充缺失值示例\n",
    "- 数据示例\n",
    "| 国名Ch  | D1           | Year |\n",
    "| ------- | ------------- | ---- |\n",
    "| 阿尔巴尼亚 | **NaN**      | 2009 |\n",
    "| 阿尔巴尼亚 | **NaN**      | 2010 |\n",
    "| 阿尔巴尼亚 | **NaN**      | 2011 |\n",
    "| 阿尔巴尼亚 | **NaN**      | 2012 |\n",
    "| 阿尔巴尼亚 | **NaN**      | 2013 |\n",
    "| 阿尔巴尼亚 | **NaN**      | 2014 |\n",
    "| 阿尔巴尼亚 | **NaN**      | 2015 |\n",
    "| 阿尔巴尼亚 | 58.29166667  | 2016 |\n",
    "| 阿尔巴尼亚 | 55.01666667  | 2017 |\n",
    "| 阿尔巴尼亚 | 59.44166667  | 2018 |\n",
    "| 阿尔巴尼亚 | 59.44166667  | 2019 |\n",
    "| 阿尔巴尼亚 | 73.025       | 2020 |\n",
    "| 阿尔巴尼亚 | 71.325       | 2021 |\n",
    "| 阿尔巴尼亚 | 70.08333333  | 2022 |\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "1db7d799",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>最小值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>均值</th>\n",
       "      <th>标准差</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>55.016667</td>\n",
       "      <td>73.025</td>\n",
       "      <td>63.803571</td>\n",
       "      <td>7.378858</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "后向填充结果示例：\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国名Ch</th>\n",
       "      <th>D1</th>\n",
       "      <th>Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">58.29166667</span></td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">58.29166667</span></td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">58.29166667</span></td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">58.29166667</span></td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">58.29166667</span></td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">58.29166667</span></td>\n",
       "      <td>2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">58.29166667</span></td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">58.29166667</span></td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td>55.01666667</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td>59.44166667</td>\n",
       "      <td>2018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td>59.44166667</td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td>73.02500000</td>\n",
       "      <td>2020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td>71.32500000</td>\n",
       "      <td>2021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>阿尔巴尼亚</td>\n",
       "      <td>70.08333333</td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from IPython.display import display, HTML\n",
    "\n",
    "# 创建数据集\n",
    "data = {\n",
    "    \"国名Ch\": [\"阿尔巴尼亚\"] * 14,\n",
    "    \"D1\": [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, \n",
    "           58.29166667, 55.01666667, 59.44166667, 59.44166667, 73.025, 71.325, 70.08333333],\n",
    "    \"Year\": list(range(2009, 2023))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 计算描述性统计量\n",
    "desc_stats = df['D1'].describe()\n",
    "desc_stats_html = desc_stats[['min', 'max', 'mean', 'std']].to_frame().T\n",
    "desc_stats_html.columns = ['最小值', '最大值', '均值', '标准差']\n",
    "desc_stats_html = desc_stats_html.to_html(index=False)\n",
    "\n",
    "# 输出描述性统计量\n",
    "display(HTML(desc_stats_html))\n",
    "\n",
    "# 后向填充\n",
    "df_bfill = df.copy()\n",
    "df_bfill['D1'] = df_bfill['D1'].bfill()\n",
    "\n",
    "# 记录填充值\n",
    "filled_values = df_bfill.loc[df['D1'].isna(), 'D1'].values\n",
    "\n",
    "# 标记填充值为红色\n",
    "def highlight_bfill(val, filled_vals):\n",
    "    if pd.isna(val):\n",
    "        return ''\n",
    "    elif val in filled_vals:\n",
    "        return f'<span style=\"color:red; font-weight:bold\">{val:.8f}</span>'\n",
    "    else:\n",
    "        return f'{val:.8f}' if isinstance(val, (int, float)) else val\n",
    "\n",
    "# 应用样式\n",
    "df_bfill['D1'] = df_bfill['D1'].apply(lambda x: highlight_bfill(x, filled_values))\n",
    "df_bfill_html = df_bfill.to_html(index=False, escape=False)\n",
    "\n",
    "# 输出后向填充结果\n",
    "print(\"后向填充结果示例：\\n\")\n",
    "display(HTML(df_bfill_html))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5c5e1b9",
   "metadata": {},
   "source": [
    "## 前后向填充缺失值示例\n",
    "- 示例数据\n",
    "| 国名Ch | S2            | Year |\n",
    "| ------ | ------------- | ---- |\n",
    "| 波兰   | **NaN**       | 2009 |\n",
    "| 波兰   | 155.0096452   | 2010 |\n",
    "| 波兰   | 227.3846522   | 2011 |\n",
    "| 波兰   | 399.2836749   | 2012 |\n",
    "| 波兰   | 517.7418118   | 2013 |\n",
    "| 波兰   | 681.131761    | 2014 |\n",
    "| 波兰   | 955.8417889   | 2015 |\n",
    "| 波兰   | 2492.488363   | 2016 |\n",
    "| 波兰   | 6534.934485   | 2017 |\n",
    "| 波兰   | 16227.07194   | 2018 |\n",
    "| 波兰   | 20606.0638    | 2019 |\n",
    "| 波兰   | 25181.38308   | 2020 |\n",
    "| 波兰   | **NaN**       | 2021 |\n",
    "| 波兰   | **NaN**       | 2022 |\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "3efeb690",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>最小值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>均值</th>\n",
       "      <th>标准差</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>155.009645</td>\n",
       "      <td>25181.38308</td>\n",
       "      <td>6725.303182</td>\n",
       "      <td>9355.756024</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前后向填充结果示例：\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国名Ch</th>\n",
       "      <th>S2</th>\n",
       "      <th>Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">155.00964520</span></td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">155.00964520</span></td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td>227.38465220</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td>399.28367490</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td>517.74181180</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td>681.13176100</td>\n",
       "      <td>2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td>955.84178890</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td>2492.48836300</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td>6534.93448500</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td>16227.07194000</td>\n",
       "      <td>2018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td>20606.06380000</td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">25181.38308000</span></td>\n",
       "      <td>2020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">25181.38308000</span></td>\n",
       "      <td>2021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波兰</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">25181.38308000</span></td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from IPython.display import display, HTML\n",
    "\n",
    "# 创建数据集\n",
    "data = {\n",
    "    \"国名Ch\": [\"波兰\"] * 14,\n",
    "    \"S2\": [np.nan, 155.0096452, 227.3846522, 399.2836749, 517.7418118, 681.131761, 955.8417889,\n",
    "           2492.488363, 6534.934485, 16227.07194, 20606.0638, 25181.38308, np.nan, np.nan],\n",
    "    \"Year\": list(range(2009, 2023))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 计算描述性统计量\n",
    "desc_stats = df['S2'].describe()\n",
    "desc_stats_html = desc_stats[['min', 'max', 'mean', 'std']].to_frame().T\n",
    "desc_stats_html.columns = ['最小值', '最大值', '均值', '标准差']\n",
    "desc_stats_html = desc_stats_html.to_html(index=False)\n",
    "\n",
    "# 输出描述性统计量\n",
    "display(HTML(desc_stats_html))\n",
    "\n",
    "# 前后向填充\n",
    "df_ffill_bfill_filled = df.copy()\n",
    "df_ffill_bfill_filled['S2'] = df_ffill_bfill_filled['S2'].fillna(method='ffill').fillna(method='bfill')\n",
    "\n",
    "# 记录填充值\n",
    "ffill_bfill_filled_values = df_ffill_bfill_filled.loc[df['S2'].isna(), 'S2'].values\n",
    "\n",
    "# 标记填充值为红色\n",
    "def highlight_filled(val, filled_vals):\n",
    "    if pd.isna(val):\n",
    "        return ''\n",
    "    elif val in filled_vals:\n",
    "        return f'<span style=\"color:red; font-weight:bold\">{val:.8f}</span>'\n",
    "    else:\n",
    "        return f'{val:.8f}' if isinstance(val, (int, float)) else val\n",
    "\n",
    "# 前后向填充应用样式\n",
    "df_ffill_bfill_filled['S2'] = df_ffill_bfill_filled['S2'].apply(lambda x: highlight_filled(x, ffill_bfill_filled_values))\n",
    "df_ffill_bfill_filled_html = df_ffill_bfill_filled.to_html(index=False, escape=False)\n",
    "\n",
    "# 输出前后向填充结果\n",
    "print(\"前后向填充结果示例：\\n\")\n",
    "display(HTML(df_ffill_bfill_filled_html))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "27ca744c",
   "metadata": {},
   "source": [
    "## 线性插值填充缺失值示例\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2bed1ba",
   "metadata": {},
   "source": [
    "### 标准线性插值数据示例\n",
    "| 国名Ch | T1           | Year |\n",
    "| ------ | ------------- | ---- |\n",
    "| 波黑   | 0.021059999  | 2009 |\n",
    "| 波黑   | **NaN**      | 2010 |\n",
    "| 波黑   | **NaN**      | 2011 |\n",
    "| 波黑   | 0.265329987  | 2012 |\n",
    "| 波黑   | 0.321319997  | 2013 |\n",
    "| 波黑   | 0.257250011  | 2014 |\n",
    "| 波黑   | 0.216030002  | 2015 |\n",
    "| 波黑   | 0.213369995  | 2016 |\n",
    "| 波黑   | 0.197799996  | 2017 |\n",
    "| 波黑   | 0.191990003  | 2018 |\n",
    "| 波黑   | 0.190009996  | 2019 |\n",
    "| 波黑   | 0.203250006  | 2020 |\n",
    "| 波黑   | 0.190540001  | 2021 |\n",
    "| 波黑   | 0.187490001  | 2022 |\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "19812788",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>最小值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>均值</th>\n",
       "      <th>标准差</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0.02106</td>\n",
       "      <td>0.32132</td>\n",
       "      <td>0.20462</td>\n",
       "      <td>0.070639</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "线性插值填充结果示例：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>国名Ch</th>\n",
       "      <th>T1</th>\n",
       "      <th>Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.02106000</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">0.10248333</span></td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td><span style=\"color:red; font-weight:bold\">0.18390666</span></td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.26532999</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.32132000</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.25725001</td>\n",
       "      <td>2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.21603000</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.21337000</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.19780000</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.19199000</td>\n",
       "      <td>2018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.19001000</td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.20325001</td>\n",
       "      <td>2020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.19054000</td>\n",
       "      <td>2021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>波黑</td>\n",
       "      <td>0.18749000</td>\n",
       "      <td>2022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from IPython.display import display, HTML\n",
    "\n",
    "# 创建数据集\n",
    "data = {\n",
    "    \"国名Ch\": [\"波黑\"] * 14,\n",
    "    \"T1\": [0.021059999, np.nan, np.nan, 0.265329987, 0.321319997, 0.257250011, 0.216030002, \n",
    "           0.213369995, 0.197799996, 0.191990003, 0.190009996, 0.203250006, 0.190540001, 0.187490001],\n",
    "    \"Year\": list(range(2009, 2023))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 计算描述性统计量\n",
    "desc_stats = df['T1'].describe()\n",
    "desc_stats_html = desc_stats[['min', 'max', 'mean', 'std']].to_frame().T\n",
    "desc_stats_html.columns = ['最小值', '最大值', '均值', '标准差']\n",
    "desc_stats_html = desc_stats_html.to_html(index=False)\n",
    "\n",
    "# 输出描述性统计量\n",
    "display(HTML(desc_stats_html))\n",
    "\n",
    "# 线性插值填充\n",
    "df_linear_filled = df.copy()\n",
    "df_linear_filled['T1'] = df_linear_filled['T1'].interpolate(method='linear')\n",
    "\n",
    "# 记录填充值\n",
    "filled_values = df_linear_filled.loc[df['T1'].isna(), 'T1'].values\n",
    "\n",
    "# 标记填充值为红色\n",
    "def highlight_linear_filled(val, filled_vals):\n",
    "    if pd.isna(val):\n",
    "        return ''\n",
    "    elif val in filled_vals:\n",
    "        return f'<span style=\"color:red; font-weight:bold\">{val:.8f}</span>'\n",
    "    else:\n",
    "        return f'{val:.8f}' if isinstance(val, (int, float)) else val\n",
    "\n",
    "# 应用样式\n",
    "df_linear_filled['T1'] = df_linear_filled['T1'].apply(lambda x: highlight_linear_filled(x, filled_values))\n",
    "df_linear_filled_html = df_linear_filled.to_html(index=False, escape=False)\n",
    "\n",
    "# 输出线性插值填充结果\n",
    "print(\"线性插值填充结果示例：\")\n",
    "display(HTML(df_linear_filled_html))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b29b805",
   "metadata": {},
   "source": [
    "### 多项式插值数据示例\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "bb75ecb6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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kh599FHddtttkqSFCxeqZcuWevPNN10+MKHu8OQxYxiGRo4cqYiICK1fv17BwcH617/+pcTERG3dulUtWrQ45/5R+9xxzOTl5emmm25Su3btNGXKlNO+xulex5MY2bLQqFGj9O677+rjjz9Wy5YtneujoqIkqULyPnDgQIWkfzpRUVHav39/hfU5OTk1eh14D08fM2X27dun6667TvHx8XrxxRfPrWlYytPHzNq1a5WWlqagoCD5+/vrkksukSR16tRJQ4YMccMeoLZ5+pgp+2Dcrl0757qgoCBddNFF+vXXX8+ldVikNn7PvPfee1q2bJm6du2qq6++Ws8//7yCg4P16quvumcnUKvccczk5+erX79+aty4sVasWKGAgACX1/GWz8CELQsYhqGHHnpIy5cv19q1axUbG+uyPTY2VlFRUVq9erVzXVFRkdatW6cuXbpU+33i4+PlcDi0ZcsW57rNmzfL4XDU6HVgvdo6ZiRp79696tmzp66++motXLhQDRrwa6Iuqq1j5h//+Ie+/PJLpaenKz09XStXrpQk/ec//9GTTz7pnp1BraitY6Zjx44KCgpyme65uLhYP//8sy644IJz3xHUmto6Zo4fPy5JFf5/1KBBA+dIKeoGdx0zeXl5SkhIUGBgoN599101bNjQ5XW86jNwbc7GAdMDDzxg2O1245NPPjGysrKcj+PHjztrnnrqKcNutxvLly83duzYYdx5551GixYtjLy8PGdNVlaWsX37duOll15yztKzfft249ChQ86afv36GZdffrmxadMmY9OmTUaHDh2MxMTEWt1fnLvaOmb27t1rXHLJJcb1119vZGZmurwX6pba/D1zsoyMDGYjrKNq85gZM2aMcf755xsffvihsXv3bmPo0KFGRESEcfjw4VrdZ5yb2jpmcnJyjPDwcGPgwIFGenq68e233xrjx483AgICjPT09Frfb5w9dxwzeXl5RlxcnNGhQwfjhx9+cHmdEydOOF/HWz4DE7YsIKnSx8KFC501paWlxpQpU4yoqCgjKCjI6N69u7Fjxw6X15kyZcoZX+fQoUPGXXfdZYSGhhqhoaHGXXfdVa3pvuFdauuYWbhwYZXvhbqlNn/PnIywVXfV5jFTVFRkjBs3zoiIiDBCQ0ON3r17G19//XUt7SncpTaPma1btxoJCQlG06ZNjdDQUKNz587GypUra2lP4S7uOGbKbhFQ2SMjI8NZ5y2fgW2GYRg1Hw8DAAAAAJwOF2MAAAAAgAcQtgAAAADAAwhbAAAAAOABhC0AAAAA8ADCFgAAAAB4AGELAAAAADyAsAUAAAAAHkDYAgAAAAAPIGwBAAAAgAcQtgAAPskwDPXu3Vt9+/atsO3555+X3W7Xr7/+akFnAID6grAFAPBJNptNCxcu1ObNm7VgwQLn+oyMDE2cOFFz585Vq1at3PqexcXFbn09AIB3I2wBAHxWTEyM5s6dq/HjxysjI0OGYWjo0KHq1auXfv/73+vGG29U48aNFRkZqeTkZB08eND5vampqbr22mt13nnnKTw8XImJifrxxx+d23/++WfZbDa98cYb6tmzpxo2bKglS5ZYsZsAAIvYDMMwrG4CAAAr3XLLLTpy5Ihuu+02PfHEE9q6das6deqkYcOG6Y9//KMKCgo0ceJEnThxQmvXrpUkvf3227LZbOrQoYOOHTumv/zlL/r555+Vnp6uBg0a6Oeff1ZsbKwuvPBCPfvss7rqqqsUFBSk6Ohoi/cWAFBbCFsAAJ934MABtW/fXocOHdJbb72l7du3a/Pmzfrwww+dNZmZmYqJidG3336r3/3udxVeIycnRxEREdqxY4fat2/vDFtz5szRmDFjanN3AABegtMIAQA+LyIiQsOHD1fbtm116623atu2bfr444/VuHFj5+PSSy+VJOepgj/++KOSkpJ00UUXKSwsTLGxsZJUYVKNTp061e7OAAC8hr/VDQAA4A38/f3l72/+b7G0tFQ333yzZsyYUaGuRYsWkqSbb75ZMTExeumllxQdHa3S0lK1b99eRUVFLvWNGjXyfPMAAK9E2AIA4BRXX3213n77bV144YXOAHayQ4cOadeuXVqwYIG6desmSdqwYUNttwkA8HKcRggAwCkefPBBHT58WHfeeae2bNmin376SatWrdK9996rkpISNWnSROHh4XrxxRf1ww8/aO3atRo7dqzVbQMAvAxhCwCAU0RHR+uzzz5TSUmJ+vbtq/bt22vMmDGy2+1q0KCBGjRooGXLlmnbtm1q3769Hn74YT399NNWtw0A8DLMRggAAAAAHsDIFgAAAAB4AGELAAAAADyAsAUAAAAAHkDYAgAAAAAPIGwBAAAAgAcQtgAAAADAAwhbAAAAAOABhC0AAAAA8ADCFgAAAAB4AGELAAAAADyAsAUAAAAAHvD/EksgfQkwUTUAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAIhCAYAAAC48qAWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABpzklEQVR4nO3deVxU9f7H8fcIiMgyrmyBSWWmaZuWopmWGxVpWdaN4lqZWpaKe1Y3tUWLXNMsy9Iyu9Yt7bYYqdc0zTWLUtNWd8EVB9wA4fz+OD9GR1BRmTkz8Ho+HvOYM+d858zny0maN99zvsdmGIYhAAAAAECZqmR1AQAAAABQHhG2AAAAAMANCFsAAAAA4AaELQAAAABwA8IWAAAAALgBYQsAAAAA3ICwBQAAAABuQNgCAAAAADcgbAEAAACAGxC2AMBiq1at0l133aU6deooMDBQERERio+P18CBA51tCgoKNG7cOCUkJCgmJkZVq1ZVgwYN9NRTT+ngwYNn3P+IESNks9nO+mjTpo17O1oKNptNI0aMcMu+i34OJ5syZYpmzJhRrO3ixYtls9n0ySefnNdnzZgx47Q/50GDBmnLli2y2Wwun130ni1btjjXPfTQQ6pbt+551XA6bdq0OeOx/vnnn2Wz2fTUU0+dts0ff/whm82mvn37lvpzS/r5A0B55291AQBQkX311Vfq1KmT2rRpo9TUVEVFRSkjI0M//PCDZs+erbFjx0qSjh49qhEjRuj+++/Xo48+qlq1aunHH3/Uiy++qC+++EI//PCDgoKCSvyMRx99VAkJCc7XGRkZ6tKli/r06aOkpCTn+rCwMPd21mKn/hwkM2zVqlVLDz30kFs+c/r06briiitc1kVHRysiIkIrVqzQpZde6pbPvRBXX321mjRpovfff18vvfSS/Pz8irWZPn26JKl79+6eLg8AfAphCwAslJqaqri4OH3zzTfy9z/xK/kf//iHUlNTna+DgoK0efNm1axZ07muTZs2qlOnjrp27apPP/1UDz74YImfERMTo5iYGOfropGTOnXqqHnz5qetLT8/XzabzaUuX3bqz8ETGjVqpKZNm5a47Uw/e6t1795dvXv31tdff63ExESXbQUFBXr//ffVpEkTXX311RZVCAC+gdMIAcBC+/fvV61atUoMNJUqnfgV7efn5xK0itxwww2SpO3bt19QHUWnzc2cOVMDBw7URRddpMDAQP3555+SpIULF6pt27YKCwtT1apV1bJlS/3vf/9z2UfRaWIbNmzQ/fffL7vdroiICD3yyCNyOBwubbOzs9WjRw/VrFlTISEhSkhI0O+//37WOg3DUEREhJ544gnnuoKCAlWvXl2VKlXS7t27nevHjRsnf39/52mWp57GVrduXW3YsEFLlixxnuJ36il7+fn5euaZZxQdHa2wsDC1a9dOv/32W6l+pmdS0mmEpWUYhqZMmaJrrrlGQUFBql69uu655x79/fffxdqlpqbq4osvVpUqVXTdddfp66+/LtVnJCUlKSgoyDmCdbL58+dr586deuSRRyRJH330kTp06KCoqCgFBQU5T289fPjwWT/ndKeN1q1bt9hoY2Zmpnr16qWYmBhVrlxZcXFxGjlypI4fP+7S7o033tDVV1+tkJAQhYaG6oorrtDTTz9dqn4DQFkjbAGAheLj47Vq1Sr17dtXq1atUn5+/jm9f9GiRZKkK6+8skzqGTZsmLZt26Y333xTX3zxhcLDw/XBBx+oQ4cOCgsL03vvvaePP/5YNWrUUMeOHYsFLkm6++67dfnll+vTTz/VU089pQ8//FD9+/d3bjcMQ3feeacz2M2dO1fNmzfXrbfeetb6bDabbrnlFi1cuNC57ocfftDBgwdVpUoVl3oWLlyoJk2aqFq1aiXua+7cubrkkkt07bXXasWKFVqxYoXmzp3r0ubpp5/W1q1bNW3aNL311lv6448/dMcdd6igoOCstUpmEDx+/LjL40L16tVLKSkpateunT777DNNmTJFGzZsUIsWLVzC5siRIzV06FC1b99en332mR5//HH16NGjVGHRbrfr7rvv1hdffKG9e/e6bJs+fbqqVKniPAX1jz/+0G233aZ33nlHaWlpSklJ0ccff6w77rjjgvtaJDMzUzfccIO++eYbPffcc/r666/VvXt3jR49Wj169HC2mz17tnr37q3WrVtr7ty5+uyzz9S/f/9SBT8AcAsDAGCZffv2GTfeeKMhyZBkBAQEGC1atDBGjx5t5OTknPG9O3bsMCIiIoymTZsaBQUFpf7MzZs3G5KMV1991bnu22+/NSQZN910k0vbw4cPGzVq1DDuuOMOl/UFBQXG1Vdfbdxwww3OdcOHDzckGampqS5te/fubVSpUsUoLCw0DMMwvv76a0OSMXHiRJd2L730kiHJGD58+BnrnzZtmiHJ2LZtm2EYhvHiiy8aV1xxhdGpUyfj4YcfNgzDMPLy8ozg4GDj6aefLlbfya688kqjdevWxT6j6Odx2223uaz/+OOPDUnGihUrzljj9OnTncf01Ed+fr7zGEyfPr3YezZv3uxc161bN+Piiy92vl6xYoUhyRg7dqzL523fvt0ICgoyhgwZYhiGYWRlZRlVqlQx7rrrLpd233//vSGpxD6f7mcwbtw457r9+/cbgYGBxgMPPFDiewoLC438/HxjyZIlhiTj559/dm4r6ed/uuN98cUXG926dXO+7tWrlxESEmJs3brVpd2YMWMMScaGDRsMwzCMJ5980qhWrdpZ+wYAnsLIFgBYqGbNmlq6dKnWrFmjl19+WZ07d9bvv/+uYcOGqXHjxtq3b1+J7ztw4IBuu+02GYahjz76yOWUwwtx9913u7xevny5Dhw4oG7durmMzhQWFiohIUFr1qwpNmrQqVMnl9dXXXWVjh07pj179kiSvv32W0nSAw884NLu5Mk6zqRdu3aS5BzdWrBggdq3b6927dppwYIFkqQVK1bo8OHDzrbnq6S+SNLWrVtL9f73339fa9ascXlcyDVwX375pWw2mx588EGX4xEZGamrr75aixcvlmT2/9ixY8V+xi1atNDFF19cqs9q3bq1Lr30UpdTCWfNmqXc3FznKYSS9PfffyspKUmRkZHy8/NTQECAWrduLUnauHHjeff1ZF9++aVuvvlmRUdHu/S7aDR0yZIlkszTag8ePKj7779f//3vf0/77wcAPKV8XPUMAD6uadOmzokU8vPzNXToUI0fP16pqakuE2VIUlZWltq3b6+dO3dq0aJFuuSSS8qsjqioKJfXRael3XPPPad9z4EDBxQcHOx8feq1ZYGBgZLMGRUl8zo1f3//Yu0iIyNLVePFF1+sSy+9VAsXLtR9992nFStWaODAgbrsssvUt29f/fbbb1q4cKGCgoLUokWLUu3zdM7Wl7Np0KDBaSfIOB+7d+92XrdWkqL/Fvbv3y+p5J9paX/ONptNjzzyiJ555hn98MMPatq0qaZPn664uDjdfPPNkqRDhw6pVatWqlKlil588UVdfvnlqlq1qrZv364uXbqU+ud0Nrt379YXX3yhgICAErcXhark5GQdP35cb7/9tu6++24VFhbq+uuv14svvqj27duXSS0AcC4IWwDgZQICAjR8+HCNHz9e69evd9mWlZWldu3aafPmzfrf//7nHGkpK6feB6lWrVqSpEmTJp129rzTffE/nZo1a+r48ePav3+/S5jJzMws9T7atm2r//73v1qyZIkKCwvVpk0bhYaGKjo6WgsWLNDChQvVqlUrZzgqL2rVqiWbzaalS5eW2LeidUU/15J+ppmZmaW+d9dDDz2k5557Tu+++64CAgL0008/6YUXXnD+d7Jo0SLt2rVLixcvdo5mSTrrvd9Orjc3N7fY+qKwWKRWrVq66qqr9NJLL5W4n+joaOfyww8/rIcffliHDx/Wd999p+HDhysxMVG///57qUf1AKCsELYAwEIZGRnFRpOkE6dfnfwlsiho/f3331qwYIGuvfZat9fXsmVLVatWTb/++quefPLJMtnnzTffrNTUVM2aNcvlprgffvhhqffRrl07vfXWW5owYYKaN2+u0NBQSWYImzt3rtasWaNRo0addT+BgYFlNvriCYmJiXr55Ze1c+dO3Xvvvadt17x5c1WpUkWzZs1yOTV0+fLl2rp1a6nDVnR0tBISEvTvf/9bx48fV6VKldStWzfn9qLQdWrwmzp1aqn2X7duXf3yyy8u6xYtWqRDhw65rEtMTNS8efN06aWXqnr16qXad3BwsG699Vbl5eXpzjvv1IYNGwhbADyOsAUAFurYsaNiYmJ0xx136IorrlBhYaHS09M1duxYhYSEqF+/fpLM09Y6duyon376SRMmTNDx48e1cuVK535q167tlhvkhoSEaNKkSerWrZsOHDige+65R+Hh4dq7d69+/vln7d27V2+88cY57bNDhw666aabNGTIEB0+fFhNmzbV999/r5kzZ5Z6H7fccotsNpvmz5+vkSNHOte3a9fOGQZKc71W48aNNXv2bH300Ue65JJLVKVKFTVu3Pic+uNJLVu2VM+ePfXwww/rhx9+0E033aTg4GBlZGRo2bJlaty4sR5//HFVr15dgwYN0osvvqhHH31UXbt21fbt2zVixIhSn0ZYpHv37vrqq680bdo0dezYUbGxsc5tLVq0UPXq1fXYY49p+PDhCggI0KxZs/Tzzz+Xat/Jycn617/+peeee06tW7fWr7/+qsmTJ8tut7u0e/7557VgwQK1aNFCffv2Vf369XXs2DFt2bJF8+bN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Unp6utLS0pSWlqb09HQlJyd7srsAAADe7aefpLfeMpcnTZL8/KytB/BxNsMwDKs+/KmnntL333+vpUuXlrjdMAxFR0crJSVFQ4cOlWSOYkVEROiVV15Rr1695HA4VLt2bc2cOVP33XefJGnXrl2KjY3VvHnz1LFjR23cuFENGzbUypUr1axZM0nSypUrFR8fr02bNql+/fpnrTU7O1t2u10Oh0NhYWFl9BMAAADwEoYhtWolff+9dP/90ocfWl0R4LVKmw0sHdn6/PPP1bRpU3Xt2lXh4eG69tpr9fbbbzu3b968WZmZmerQoYNzXWBgoFq3bq3ly5dLktauXav8/HyXNtHR0WrUqJGzzYoVK2S3251BS5KaN28uu93ubHOq3NxcZWdnuzwAAADKrX//2wxaVatKqalWVwOUC5aGrb///ltvvPGG6tWrp2+++UaPPfaY+vbtq/fff1+SlJmZKUmKiIhweV9ERIRzW2ZmpipXrqzq1aufsU14eHixzw8PD3e2OdXo0aOd13fZ7XbFxsZeWGcBAAC81aFD5g2MJemZZ6SYGGvrAcoJS8NWYWGhrrvuOo0aNUrXXnutevXqpR49euiNN95waWc75SZ6hmEUW3eqU9uU1P5M+xk2bJgcDofzsX379tJ2CwAAwLeMGiXt2iVdcok0YIDV1QDlhqVhKyoqSg0bNnRZ16BBA23btk2SFBkZKUnFRp/27NnjHO2KjIxUXl6esrKyzthm9+7dxT5/7969xUbNigQGBiosLMzlAQAAUO78+ac0dqy5PH68VKWKtfUA5YilYatly5b67bffXNb9/vvvuvjiiyVJcXFxioyM1IIFC5zb8/LytGTJErVo0UKS1KRJEwUEBLi0ycjI0Pr1651t4uPj5XA4tHr1amebVatWyeFwONsAAABUSAMGSHl5UseO0h13WF0NUK74W/nh/fv3V4sWLTRq1Cjde++9Wr16td566y299f9TjtpsNqWkpGjUqFGqV6+e6tWrp1GjRqlq1apKSkqSJNntdnXv3l0DBw5UzZo1VaNGDQ0aNEiNGzdWu3btJJmjZQkJCerRo4emTp0qSerZs6cSExNLNRMhAABAufT119IXX0j+/tKECdJZLtMAcG4sDVvXX3+95s6dq2HDhun5559XXFycJkyYoAceeMDZZsiQITp69Kh69+6trKwsNWvWTPPn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8ktVr15drVu31oEDB8qoBziVO4+pzWbTggUL9NNPPyk0NFRVqlTR+PHjlZaWpmrVqpVZH+CqrI7p/v379cILL6hXr17OdXxXso47j+uprPyudPr4B4948skn9csvv2jZsmXFttlsNpfXhmEUW3c2JbU/n/3g3Lj7uBbZtWuXEhIS1LVrVz366KPntQ+UjjuP6aRJk5Sdna1hw4ZdcJ04N+48roWFhZKkZ555Rnfffbckafr06YqJidF//vOfM34xwPlz5zE1DEO9e/dWeHi4li5dqqCgIE2bNk2JiYlas2aNoqKiLrh+FFcWxzQ7O1u33367GjZsqOHDh59xH2faD8qOu49rEau/KzGyZaE+ffro888/17fffquYmBjn+sjISEkqluD37NlTLOmfSWRkpHbv3l1s/d69e89pPzg37j6uRXbt2qWbb75Z8fHxeuutty6saJyRu4/pokWLtHLlSgUGBsrf31+XXXaZJKlp06bq1q1bGfQAJXH3cS364t2wYUPnusDAQF1yySXatm3bhZSO0/DEv9Uvv/xSs2fPVsuWLXXddddpypQpCgoK0nvvvVc2nYCLsjimOTk5SkhIUEhIiObOnauAgACX/fBdyfPcfVyLeMN3JcKWBQzD0JNPPqk5c+Zo0aJFiouLc9keFxenyMhILViwwLkuLy9PS5YsUYsWLUr9OfHx8XI4HFq9erVz3apVq+RwOM5pPygdTx1XSdq5c6fatGmj6667TtOnT1elSvxTdgdPHdPXXntNP//8s9LT05Wenq558+ZJkj766CO99NJLZdMZOHnquDZp0kSBgYEu0xrn5+dry5Ytuvjiiy+8I3Dy1DE9cuSIJBX7nVupUiXnSCbKRlkd0+zsbHXo0EGVK1fW559/ripVqrjsh+9KnuWp4yp50Xclj03FAafHH3/csNvtxuLFi42MjAzn48iRI842L7/8smG32405c+YY69atM+6//34jKirKyM7OdrbJyMgwfvrpJ+Ptt992zo70008/Gfv373e2SUhIMK666ipjxYoVxooVK4zGjRsbiYmJHu1vReGp47pz507jsssuM2655RZjx44dLp+FsuXJf6sn27x5M7MRupEnj2u/fv2Miy66yPjmm2+MTZs2Gd27dzfCw8ONAwcOeLTP5Z2njunevXuNmjVrGl26dDHS09ON3377zRg0aJAREBBgpKene7zf5VlZHNPs7GyjWbNmRuPGjY0///zTZT/Hjx937ofvSp7jqePqTd+VCFsWkFTiY/r06c42hYWFxvDhw43IyEgjMDDQuOmmm4x169a57Gf48OFn3c/+/fuNBx54wAgNDTVCQ0ONBx54oFRTiePceeq4Tp8+/bSfhbLlyX+rJyNsuZcnj2teXp4xcOBAIzw83AgNDTXatWtnrF+/3kM9rTg8eUzXrFljdOjQwahRo4YRGhpqNG/e3Jg3b56HelpxlMUxLZrCv6TH5s2bne34ruQ5njqu3vRdyWYYhnG20S8AAAAAwLnhQg8AAAAAcAPCFgAAAAC4AWELAAAAANyAsAUAAAAAbkDYAgAAAAA3IGwBAAAAgBsQtgAAAADADQhbAAAAAOAGhC0AAAAAcAPCFgCgQjIMQ+3atVPHjh2LbZsyZYrsdru2bdtmQWUAgPKCsAUAqJBsNpumT5+uVatWaerUqc71mzdv1tChQzVx4kTVqVOnTD8zPz+/TPcHAPBuhC0AQIUVGxuriRMnatCgQdq8ebMMw1D37t3Vtm1b3XDDDbrtttsUEhKiiIgIJScna9++fc73pqWl6cYbb1S1atVUs2ZNJSYm6q+//nJu37Jli2w2mz7++GO1adNGVapU0QcffGBFNwEAFrEZhmFYXQQAAFa68847dfDgQd1999164YUXtGbNGjVt2lQ9evTQP//5Tx09elRDhw7V8ePHtWjRIknSp59+KpvNpsaNG+vw4cN67rnntGXLFqWnp6tSpUrasmWL4uLiVLduXY0dO1bXXnutAgMDFR0dbXFvAQCeQtgCAFR4e/bsUaNGjbR//3598skn+umnn7Rq1Sp98803zjY7duxQbGysfvvtN11++eXF9rF3716Fh4dr3bp1atSokTNsTZgwQf369fNkdwAAXoLTCAEAFV54eLh69uypBg0a6K677tLatWv17bffKiQkxPm44oorJMl5quBff/2lpKQkXXLJJQoLC1NcXJwkFZtUo2nTpp7tDADAa/hbXQAAAN7A399f/v7m/xYLCwt1xx136JVXXinWLioqSpJ0xx13KDY2Vm+//baio6NVWFioRo0aKS8vz6V9cHCw+4sHAHglwhYAAKe47rrr9Omnn6pu3brOAHay/fv3a+PGjZo6dapatWolSVq2bJmnywQAeDlOIwQA4BRPPPGEDhw4oPvvv1+rV6/W33//rfnz5+uRRx5RQUGBqlevrpo1a+qtt97Sn3/+qUWLFmnAgAFWlw0A8DKELQAAThEdHa3vv/9eBQUF6tixoxo1aqR+/frJbrerUqVKqlSpkmbPnq21a9eqUaNG6t+/v1599VWrywYAeBlmIwQAAAAAN2BkCwAAAADcgLAFAAAAAG5A2AIAAAAANyBsAQAAAIAbELYAAAAAwA0IWwAAAADgBoQtAAAAAHADwhYAAAAAuAFhCwAAAADcgLAFAAAAAG5A2AIAAAAAN/g/C8lLlBcC12YAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    国名Ch    S2_filled  Year\n",
      "0   白俄罗斯          NaN  2009\n",
      "1   白俄罗斯     5.061243  2010\n",
      "2   白俄罗斯     9.089330  2011\n",
      "3   白俄罗斯    25.511187  2012\n",
      "4   白俄罗斯    38.758003  2013\n",
      "5   白俄罗斯    61.279471  2014\n",
      "6   白俄罗斯   107.915844  2015\n",
      "7   白俄罗斯   440.472390  2016\n",
      "8   白俄罗斯  2269.270003  2017\n",
      "9   白俄罗斯  3436.883031  2018\n",
      "10  白俄罗斯  5750.678521  2019\n",
      "11  白俄罗斯  7550.571687  2020\n",
      "12  白俄罗斯  7550.571687  2021\n",
      "13  白俄罗斯  7550.571687  2022\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 创建示例数据集\n",
    "data = {\n",
    "    '国名Ch': ['白俄罗斯'] * 14,\n",
    "    'S2': [np.nan, 5.061243, 9.089330, 25.511187, 38.758003, 61.279471, 107.915844, 440.472390, 2269.270003, 3436.883031, 5750.678521, 7550.571687, np.nan, np.nan],\n",
    "    'Year': list(range(2009, 2023))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 绘制数据趋势图\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(df['Year'], df['S2'], marker='o', linestyle='--', color='b', label='S2')\n",
    "plt.title('S2 Trend')\n",
    "plt.xlabel('Year')\n",
    "plt.ylabel('S2')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "# 线性插值填充缺失值\n",
    "df['S2_filled'] = df['S2'].interpolate(method='linear')\n",
    "\n",
    "# 填充结果不能为负值\n",
    "df['S2_filled'] = df['S2_filled'].apply(lambda x: max(x, 0))\n",
    "\n",
    "# 绘制填充后的数据\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(df['Year'], df['S2_filled'], marker='o', linestyle='-', color='r', label='S2 Filled')\n",
    "plt.title('S2 Trend with Filled Values')\n",
    "plt.xlabel('Year')\n",
    "plt.ylabel('S2')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "# 输出填充后的数据\n",
    "print(df[['国名Ch', 'S2_filled', 'Year']])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5623adc9",
   "metadata": {},
   "source": [
    "### 多项式插值及前向填充结合示例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "9c9b68b2",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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kh599FHddtttkqSFCxeqZcuWevPNN10+MKHu8OQxYxiGRo4cqYiICK1fv17BwcH617/+pcTERG3dulUtWrQ45/5R+9xxzOTl5emmm25Su3btNGXKlNO+xulex5MY2bLQqFGj9O677+rjjz9Wy5YtneujoqIkqULyPnDgQIWkfzpRUVHav39/hfU5OTk1eh14D08fM2X27dun6667TvHx8XrxxRfPrWlYytPHzNq1a5WWlqagoCD5+/vrkksukSR16tRJQ4YMccMeoLZ5+pgp+2Dcrl0757qgoCBddNFF+vXXX8+ldVikNn7PvPfee1q2bJm6du2qq6++Ws8//7yCg4P16quvumcnUKvccczk5+erX79+aty4sVasWKGAgACX1/GWz8CELQsYhqGHHnpIy5cv19q1axUbG+uyPTY2VlFRUVq9erVzXVFRkdatW6cuXbpU+33i4+PlcDi0ZcsW57rNmzfL4XDU6HVgvdo6ZiRp79696tmzp66++motXLhQDRrwa6Iuqq1j5h//+Ie+/PJLpaenKz09XStXrpQk/ec//9GTTz7pnp1BraitY6Zjx44KCgpyme65uLhYP//8sy644IJz3xHUmto6Zo4fPy5JFf5/1KBBA+dIKeoGdx0zeXl5SkhIUGBgoN599101bNjQ5XW86jNwbc7GAdMDDzxg2O1245NPPjGysrKcj+PHjztrnnrqKcNutxvLly83duzYYdx5551GixYtjLy8PGdNVlaWsX37duOll15yztKzfft249ChQ86afv36GZdffrmxadMmY9OmTUaHDh2MxMTEWt1fnLvaOmb27t1rXHLJJcb1119vZGZmurwX6pba/D1zsoyMDGYjrKNq85gZM2aMcf755xsffvihsXv3bmPo0KFGRESEcfjw4VrdZ5yb2jpmcnJyjPDwcGPgwIFGenq68e233xrjx483AgICjPT09Frfb5w9dxwzeXl5RlxcnNGhQwfjhx9+cHmdEydOOF/HWz4DE7YsIKnSx8KFC501paWlxpQpU4yoqCgjKCjI6N69u7Fjxw6X15kyZcoZX+fQoUPGXXfdZYSGhhqhoaHGXXfdVa3pvuFdauuYWbhwYZXvhbqlNn/PnIywVXfV5jFTVFRkjBs3zoiIiDBCQ0ON3r17G19//XUt7SncpTaPma1btxoJCQlG06ZNjdDQUKNz587GypUra2lP4S7uOGbKbhFQ2SMjI8NZ5y2fgW2GYRg1Hw8DAAAAAJwOF2MAAAAAgAcQtgAAAADAAwhbAAAAAOABhC0AAAAA8ADCFgAAAAB4AGELAAAAADyAsAUAAAAAHkDYAgAAAAAPIGwBAAAAgAcQtgAAPskwDPXu3Vt9+/atsO3555+X3W7Xr7/+akFnAID6grAFAPBJNptNCxcu1ObNm7VgwQLn+oyMDE2cOFFz585Vq1at3PqexcXFbn09AIB3I2wBAHxWTEyM5s6dq/HjxysjI0OGYWjo0KHq1auXfv/73+vGG29U48aNFRkZqeTkZB08eND5vampqbr22mt13nnnKTw8XImJifrxxx+d23/++WfZbDa98cYb6tmzpxo2bKglS5ZYsZsAAIvYDMMwrG4CAAAr3XLLLTpy5Ihuu+02PfHEE9q6das6deqkYcOG6Y9//KMKCgo0ceJEnThxQmvXrpUkvf3227LZbOrQoYOOHTumv/zlL/r555+Vnp6uBg0a6Oeff1ZsbKwuvPBCPfvss7rqqqsUFBSk6Ohoi/cWAFBbCFsAAJ934MABtW/fXocOHdJbb72l7du3a/Pmzfrwww+dNZmZmYqJidG3336r3/3udxVeIycnRxEREdqxY4fat2/vDFtz5szRmDFjanN3AABegtMIAQA+LyIiQsOHD1fbtm116623atu2bfr444/VuHFj5+PSSy+VJOepgj/++KOSkpJ00UUXKSwsTLGxsZJUYVKNTp061e7OAAC8hr/VDQAA4A38/f3l72/+b7G0tFQ333yzZsyYUaGuRYsWkqSbb75ZMTExeumllxQdHa3S0lK1b99eRUVFLvWNGjXyfPMAAK9E2AIA4BRXX3213n77bV144YXOAHayQ4cOadeuXVqwYIG6desmSdqwYUNttwkA8HKcRggAwCkefPBBHT58WHfeeae2bNmin376SatWrdK9996rkpISNWnSROHh4XrxxRf1ww8/aO3atRo7dqzVbQMAvAxhCwCAU0RHR+uzzz5TSUmJ+vbtq/bt22vMmDGy2+1q0KCBGjRooGXLlmnbtm1q3769Hn74YT399NNWtw0A8DLMRggAAAAAHsDIFgAAAAB4AGELAAAAADyAsAUAAAAAHkDYAgAAAAAPIGwBAAAAgAcQtgAAAADAAwhbAAAAAOABhC0AAAAA8ADCFgAAAAB4AGELAAAAADyAsAUAAAAAHvD/EksgfQkwUTUAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2QAAAIhCAYAAAAhCnmjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABt6UlEQVR4nO3de3zO9f/H8edlJ5vZhc1OzKHydWg6UYxkvhjVSJS+rfZNCSWHhUgHdECNopLoRKGvTugkoSQKSa0iKjVy2BBzzakdP78/Pr9dXDYM2z7Xde1xv92u2z6H9/W5Xu99qOvp/fm8PzbDMAwBAAAAACpcFasLAAAAAIDKikAGAAAAABYhkAEAAACARQhkAAAAAGARAhkAAAAAWIRABgAAAAAWIZABAAAAgEUIZAAAAABgEQIZAAAAAFiEQAYAHmDdunW68cYbVa9ePQUEBCgiIkJxcXEaPny4s01BQYGeffZZde3aVXXr1lVQUJCaNm2qBx98UAcPHjzt8ceNGyebzXbGV3x8fPl2tBRsNpvGjRtXLscu+j2caPr06Zo9e3axtl9++aVsNpvee++9c/qs2bNnn/L3PGLECG3btk02m83ls4ves23bNue2Pn36qEGDBudUw6nEx8ef9lz/+OOPstlsevDBB0/Z5vfff5fNZtOQIUNK/bkl/f4BwNv5Wl0AAOD0PvnkE3Xv3l3x8fFKTU1VVFSUMjIy9N1332n+/Pl65plnJEnHjh3TuHHjdOutt+ruu+9WWFiYvv/+ez355JP66KOP9N133ykwMLDEz7j77rvVtWtX53pGRoZ69uypwYMHKykpybk9JCSkfDtrsZN/D5IZyMLCwtSnT59y+cxZs2apSZMmLtuio6MVERGhNWvW6MILLyyXzz0fl156qVq0aKE333xT48ePl4+PT7E2s2bNkiT17du3ossDAI9CIAMAN5eamqqGDRvqs88+k6/v8f9s/+c//1FqaqpzPTAwUOnp6QoNDXVui4+PV7169XTzzTfr/fff1+23317iZ9StW1d169Z1rheNwNSrV0+tW7c+ZW15eXmy2WwudXmyk38PFSE2NlYtW7Yscd/pfvdW69u3rwYOHKhPP/1UiYmJLvsKCgr05ptvqkWLFrr00kstqhAAPAOXLAKAm9u/f7/CwsJKDD1Vqhz/z7iPj49LGCty1VVXSZJ27NhxXnUUXaI3Z84cDR8+XHXq1FFAQIC2bt0qSVq+fLk6duyokJAQBQUFqW3btvr8889djlF0SdqmTZt06623ym63KyIiQnfddZccDodL2+zsbPXr10+hoaEKDg5W165d9dtvv52xTsMwFBERofvuu8+5raCgQDVr1lSVKlW0Z88e5/Znn31Wvr6+zks6T75krkGDBtq0aZNWrlzpvJzw5MsD8/Ly9PDDDys6OlohISHq1KmTfv3111L9Tk+npEsWS8swDE2fPl2XXXaZAgMDVbNmTd100036888/i7VLTU1V/fr1VbVqVV1xxRX69NNPS/UZSUlJCgwMdI6EnWjp0qXatWuX7rrrLknS22+/rYSEBEVFRSkwMNB5Ke2RI0fO+DmnukS1QYMGxUYtMzMzNWDAANWtW1f+/v5q2LChHnvsMeXn57u0e+mll3TppZcqODhY1atXV5MmTfTQQw+Vqt8AUNYIZADg5uLi4rRu3ToNGTJE69atU15e3lm9/4svvpAkXXzxxWVSz+jRo/XXX39pxowZ+uijjxQeHq65c+cqISFBISEheuONN/TOO++oVq1a6tKlS7FQJkm9evXSv/71L73//vt68MEH9dZbb+n+++937jcMQz169HCGv4ULF6p169a69tprz1ifzWbTv//9by1fvty57bvvvtPBgwdVtWpVl3qWL1+uFi1aqEaNGiUea+HChbrgggt0+eWXa82aNVqzZo0WLlzo0uahhx7S9u3b9eqrr+rll1/W77//rm7duqmgoOCMtUpmWMzPz3d5na8BAwYoJSVFnTp10qJFizR9+nRt2rRJbdq0cQmkjz32mEaNGqXOnTtr0aJFuvfee9WvX79SBUq73a5evXrpo48+0r59+1z2zZo1S1WrVnVe7vr777/ruuuu02uvvaYlS5YoJSVF77zzjrp163befS2SmZmpq666Sp999pnGjBmjTz/9VH379tXEiRPVr18/Z7v58+dr4MCBat++vRYuXKhFixbp/vvvL1U4BIByYQAA3Nrff/9tXH311YYkQ5Lh5+dntGnTxpg4caJx6NCh0753586dRkREhNGyZUujoKCg1J+Znp5uSDImTZrk3LZixQpDknHNNde4tD1y5IhRq1Yto1u3bi7bCwoKjEsvvdS46qqrnNvGjh1rSDJSU1Nd2g4cONCoWrWqUVhYaBiGYXz66aeGJOO5555zaTd+/HhDkjF27NjT1v/qq68akoy//vrLMAzDePLJJ40mTZoY3bt3N+68807DMAwjNzfXqFatmvHQQw8Vq+9EF198sdG+fftin1H0+7juuutctr/zzjuGJGPNmjWnrXHWrFnOc3ryKy8vz3kOZs2aVew96enpzm133HGHUb9+fef6mjVrDEnGM8884/J5O3bsMAIDA42RI0cahmEYWVlZRtWqVY0bb7zRpd3XX39tSCqxz6f6HTz77LPObfv37zcCAgKM2267rcT3FBYWGnl5ecbKlSsNScaPP/7o3FfS7/9U57t+/frGHXfc4VwfMGCAERwcbGzfvt2l3eTJkw1JxqZNmwzDMIxBgwYZNWrUOGPfAKCiMEIGAG4uNDRUq1at0vr16/XUU0/phhtu0G+//abRo0erefPm+vvvv0t834EDB3TdddfJMAy9/fbbLpc3no9evXq5rH/zzTc6cOCA7rjjDpdRnsLCQnXt2lXr168vNvrQvXt3l/VLLrlE//zzj/bu3StJWrFihSTptttuc2l34gQjp9OpUydJco6SLVu2TJ07d1anTp20bNkySdKaNWt05MgRZ9tzVVJfJGn79u2lev+bb76p9evXu7zO5568jz/+WDabTbfffrvL+YiMjNSll16qL7/8UpLZ/3/++afY77hNmzaqX79+qT6rffv2uvDCC10uW5w3b55ycnKclytK0p9//qmkpCRFRkbKx8dHfn5+at++vSRp8+bN59zXE3388cfq0KGDoqOjXfpdNKq6cuVKSeYlvAcPHtStt96qDz744JR/fwCgonjHXdgAUAm0bNnSOflDXl6eRo0apSlTpig1NdVlcg9JysrKUufOnbVr1y598cUXuuCCC8qsjqioKJf1okvgbrrpplO+58CBA6pWrZpz/eR73QICAiSZM0VK5n1zvr6+xdpFRkaWqsb69evrwgsv1PLly3XLLbdozZo1Gj58uC666CINGTJEv/76q5YvX67AwEC1adOmVMc8lTP15UyaNm16ykk9zsWePXuc99GVpOjPwv79+yWV/Dst7e/ZZrPprrvu0sMPP6zvvvtOLVu21KxZs9SwYUN16NBBknT48GG1a9dOVatW1ZNPPql//etfCgoK0o4dO9SzZ89S/57OZM+ePfroo4/k5+dX4v6i4JWcnKz8/Hy98sor6tWrlwoLC3XllVfqySefVOfOncukFgA4GwQyAPBAfn5+Gjt2rKZMmaKNGze67MvKylKnTp2Unp6uzz//3DliU1ZOfk5UWFiYJOmFF1445ayApwoHpxIaGqr8/Hzt37/fJfBkZmaW+hgdO3bUBx98oJUrV6qwsFDx8fGqXr26oqOjtWzZMi1fvlzt2rVzBihvERYWJpvNplWrVpXYt6JtRb/Xkn6nmZmZpX62WZ8+fTRmzBi9/vrr8vPz0w8//KAnnnjC+efkiy++0O7du/Xll186R8UknfHZeCfWm5OTU2x7UaAsEhYWpksuuUTjx48v8TjR0dHO5TvvvFN33nmnjhw5oq+++kpjx45VYmKifvvtt1KPDgJAWSGQAYCby8jIKDYqJR2/1OvEL5pFYezPP//UsmXLdPnll5d7fW3btlWNGjX0yy+/aNCgQWVyzA4dOig1NVXz5s1zebDwW2+9VepjdOrUSS+//LKmTp2q1q1bq3r16pLMoLZw4UKtX79eEyZMOONxAgICymwUpyIkJibqqaee0q5du9S7d+9TtmvdurWqVq2qefPmuVyG+s0332j79u2lDmTR0dHq2rWr/ve//yk/P19VqlTRHXfc4dxfFMxODoczZ84s1fEbNGign376yWXbF198ocOHD7tsS0xM1OLFi3XhhReqZs2apTp2tWrVdO211yo3N1c9evTQpk2bCGQAKhyBDADcXJcuXVS3bl1169ZNTZo0UWFhodLS0vTMM88oODhYQ4cOlWReItelSxf98MMPmjp1qvLz87V27VrncWrXrl0uDxkODg7WCy+8oDvuuEMHDhzQTTfdpPDwcO3bt08//vij9u3bp5deeumsjpmQkKBrrrlGI0eO1JEjR9SyZUt9/fXXmjNnTqmP8e9//1s2m01Lly7VY4895tzeqVMnZ2Aozf1jzZs31/z58/X222/rggsuUNWqVdW8efOz6k9Fatu2rfr3768777xT3333na655hpVq1ZNGRkZWr16tZo3b657771XNWvW1IgRI/Tkk0/q7rvv1s0336wdO3Zo3Lhxpb5ksUjfvn31ySef6NVXX1WXLl0UExPj3NemTRvVrFlT99xzj8aOHSs/Pz/NmzdPP/74Y6mOnZycrEcffVRjxoxR+/bt9csvv2jatGmy2+0u7R5//HEtW7ZMbdq00ZAhQ9S4cWP9888/2rZtmxYvXqwZM2ao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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    国名Ch            S2  Year\n",
      "0   白俄罗斯      5.061243  2009\n",
      "1   白俄罗斯      5.061243  2010\n",
      "2   白俄罗斯      9.089330  2011\n",
      "3   白俄罗斯     25.511187  2012\n",
      "4   白俄罗斯     38.758003  2013\n",
      "5   白俄罗斯     61.279471  2014\n",
      "6   白俄罗斯    107.915844  2015\n",
      "7   白俄罗斯    440.472390  2016\n",
      "8   白俄罗斯   2269.270003  2017\n",
      "9   白俄罗斯   3436.883031  2018\n",
      "10  白俄罗斯   5750.678521  2019\n",
      "11  白俄罗斯   7550.571687  2020\n",
      "12  白俄罗斯  11045.566544  2021\n",
      "13  白俄罗斯  14969.063980  2022\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "# 创建示例数据集\n",
    "data = {\n",
    "    '国名Ch': ['白俄罗斯'] * 14,\n",
    "    'S2': [np.nan, 5.061243, 9.089330, 25.511187, 38.758003, 61.279471, 107.915844, 440.472390, 2269.270003, 3436.883031, 5750.678521, 7550.571687, np.nan, np.nan],\n",
    "    'Year': list(range(2009, 2023))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 绘制数据趋势图\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(df['Year'], df['S2'], marker='o', linestyle='--', color='b', label='S2')\n",
    "plt.title('S2 Trend')\n",
    "plt.xlabel('Year')\n",
    "plt.ylabel('S2')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "# 填充第一个缺失值\n",
    "if pd.isna(df.loc[0, 'S2']):\n",
    "    first_non_nan_value = df['S2'].ffill().iloc[1]\n",
    "    df.loc[0, 'S2'] = first_non_nan_value\n",
    "\n",
    "# 使用非缺失值进行多项式拟合\n",
    "df_non_nan = df.dropna(subset=['S2'])\n",
    "X = df_non_nan[['Year']]\n",
    "y = df_non_nan['S2']\n",
    "poly = PolynomialFeatures(degree=3)\n",
    "X_poly = poly.fit_transform(X)\n",
    "poly_reg = LinearRegression()\n",
    "poly_reg.fit(X_poly, y)\n",
    "\n",
    "# 填充后续缺失值\n",
    "for idx in df.index:\n",
    "    if pd.isna(df.loc[idx, 'S2']):\n",
    "        X_pred = poly.transform([[df.loc[idx, 'Year']]])\n",
    "        pred = poly_reg.predict(X_pred)\n",
    "        df.loc[idx, 'S2'] = max(pred[0], 0)  # 确保填充值不为负\n",
    "\n",
    "# 绘制填充后的数据\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(df['Year'], df['S2'], marker='o', linestyle='-', color='r', label='S2 Filled')\n",
    "plt.title('S2 Trend with Filled Values')\n",
    "plt.xlabel('Year')\n",
    "plt.ylabel('S2')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "# 输出填充后的数据\n",
    "print(df[['国名Ch', 'S2', 'Year']])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "817153a5",
   "metadata": {},
   "source": [
    "### 多项式插值及其它前向后向填充结合示例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "f9e7bda2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    国名Ch         S1  Year\n",
      "0   孟加拉国   3.100000  2009\n",
      "1   孟加拉国   3.700000  2010\n",
      "2   孟加拉国   4.500000  2011\n",
      "3   孟加拉国   5.000000  2012\n",
      "4   孟加拉国   6.630000  2013\n",
      "5   孟加拉国  11.900000  2014\n",
      "6   孟加拉国  12.900000  2015\n",
      "7   孟加拉国  18.100000  2016\n",
      "8   孟加拉国  19.800000  2017\n",
      "9   孟加拉国  23.440000  2018\n",
      "10  孟加拉国  27.760000  2019\n",
      "11  孟加拉国  32.870000  2020\n",
      "12  孟加拉国  38.917445  2021\n",
      "13  孟加拉国  38.917445  2022\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# 创建示例数据集\n",
    "data = {\n",
    "    '国名Ch': ['孟加拉国'] * 14,\n",
    "    'S1': [3.1, 3.7, 4.5, 5.0, 6.63, 11.9, 12.9, 18.1, 19.8, 23.44, 27.76, 32.87, 38.917445, np.nan],\n",
    "    'Year': list(range(2009, 2022 + 1))\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# 线性插值填充缺失值\n",
    "df['S1'] = df['S1'].interpolate(method='linear')\n",
    "\n",
    "# 填充第一个缺失值（如果存在）\n",
    "if pd.isna(df.loc[0, 'S1']):\n",
    "    df.loc[0, 'S1'] = df['S1'].ffill().iloc[0]\n",
    "\n",
    "# 填充最后一个缺失值（如果存在）\n",
    "if pd.isna(df.loc[df.index[-1], 'S1']):\n",
    "    df.loc[df.index[-1], 'S1'] = df['S1'].bfill().iloc[-1]\n",
    "\n",
    "# 输出填充后的数据\n",
    "print(df)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
